![]() |
AW: records oder klassen?
Zitat:
|
AW: records oder klassen?
Das hängt davon ab, wie du Records benutzt.
Allgemein kann man sagen: Wird ein Record als Zeiger deklariert: - mit New() erstellen und dem Zeiger zuweisen - mit Dispose() freigegeben (Zeiger ist danach ungültig)
Delphi-Quellcode:
Wird ein Record direkt als Variable deklariert, kümmert sich der Compiler:
type
PMyRecord = ^TMyRecord; TMyRecord = record ID: Integer; Name: string; end; var P: PMyRecord; begin New(P); try TuWasMit(P); finally Dispose(P); end; end; - um die Bereitstellung des Speichers beim Eintritt in den Gültigkeitsbereich - um die Freigabe des Speichers beim Verlassen des Gültigkeitsbereichs
Delphi-Quellcode:
type
PMyRecord = ^TMyRecord; TMyRecord = record ID: Integer; Name: string; end; var R: TMyRecord; begin TuWasMit(^R); end; |
AW: records oder klassen?
Zitat:
|
AW: records oder klassen?
Ob bei der Parameterübergabe eine Kopie oder nur eine Referenz (praktisch ein Zeiger auf den übergebenen Record, aber vor dem Entwickler verborgen) übergeben wird, kann man aber mit den Schlüsselworten const, var oder out steuern.
Delphi-Quellcode:
Die Prozeduren erzeugen genau den selben Code. Der Compiler führt beim Compilieren aber unterschiedliche Prüfungen aus und kann den Entwickler so bei falscher Benutzung warnen.
procedure TuWasMitPointer(P: PMyRecord);
begin P^.ID := 1; P^.Name := 'Test'; end; procedure TuWasMitReferenz(var R: TMyRecord); begin R.ID := 1; R.Name := 'Test'; end; procedure TuWasMitReferenz(out R: TMyRecord); begin R.ID := 1; R.Name := 'Test'; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz