![]() |
Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Kann jemand mir erklären, welchen Unterschied gibt es zwischen FreeAndNil(Objekt) und Objekt.Free?
|
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
FreeAndNil ist
Delphi-Quellcode:
Objekt.Free;
Objekt := Nil; |
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Sofern ich es verstanden habe:
Du hast eine Variable die Du mit Create einer Klasse erzeugt hast.
Delphi-Quellcode:
myVar := TMyVar.Create;
Delphi-Quellcode:
gibt nur den reservierten (und belegten) Speicherbereich frei, auf den myVar zeigt.
myVar.Free
Der Zeiger selber hat danach immer noch die Adresse des Speicherbereiches.
Delphi-Quellcode:
gibt den reservierten (und belegten) Speicherbereich frei und setzt zusätzlich
FreeAndNil(myVar);
der Zeiger von myVar auf nil. Damit kannst Du hinterher sauber mit (myVar = nil) prüfen. Gruß, Christoph |
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
zusatz: freeandnil kannst du auch mit einem nicht erzeugten objekt aufrufen ohne das es knallt, sprich du musst vorher nicht auf nil prüfen umd das objekt freizugeben
|
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Hallo,
Vorsicht mit solchen Behauptungen.
Delphi-Quellcode:
Was du meintest war, dass .Free auch bei NIL-Objekten klappt.
procedure TForm1.FormCreate(Sender: TObject);
var Button: TButton; begin FreeAndNIL(Button); // Schutzverletzung ! end;
Delphi-Quellcode:
Was das etwas undurchsichtig macht ist, dass Klassenvariablen
procedure TForm1.FormCreate(Sender: TObject);
var Button: TButton; begin Button:= NIL; Button.Free; // OK end; automatisch initialisiert werden, Zeiger und damit auch Objekte also z.B. NIL sind. Das FreeAndNIL ist einfach die Zusammenfassung von 2 Befehlen. Heiko |
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Zitat:
[edit] Zitat:
[/edit] |
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Zitat:
|
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Hm? Ob das Objekt instanziiert wurde, kann weder Free noch FreeAndNil erkennen. Sie können nur den Pointer auf nil prüfen, aber das machen eben beide.
Man könnte höchstens sagen, dass bei einem Aufruf von FreeAndNil ein weiteres Free(AndNil) nicht fehlschlagen wird. |
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Zitat:
|
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 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-2025 by Thomas Breitkreuz