@Hansa:
Also, dass man
TObject.Free und eben *nicht*
TObject.Destroy aufrufen soll, steht doch explizit in der offiziellen Delphi Hilfe-Datei. Macht ja auch Sinn, weil - wie schon oft gesagt - TObject.Free auch nichts anderes tut als TObject.Destroy aufzurufen. Der einzige Unterschied: TObject.Free verhindert, dass ein
TObject = nil einen
AV Error verursacht. Von daher is TObject.Free die sichere Methode!
Aber TObject wird dabei niemals
nil, weder bei TObject.Free noch bei TObject.Destroy. Ob man das "zerstörte" TObject nun als "dangling pointer" lässt oder manuell auf
nil zurücksetzt, is ja nur dann interessant, wenn man zu einem späteren Zeitpunkt nochmal auf den Pointer zugreift. Also z.B. wenn man noch mal Object.Free ausführt, ohne vorhersagen zu können, ob das Objekt bereits "zerstört" wurde. Ansonsten is das grad egal...
Ob man nun
FreeAndNil(Object) oder
Object.Free plus
Object=nil benutzt kommt auf's gleiche raus. Aber FreeAndNil() is wohl die elegantere Lösung...
Zitat von
Delphi Basics:
Example code : Free and nil an object, and then try to do this again
Delphi-Quellcode:
var
myList : TList;
begin
// Create the list object
myList := TList.Create;
// And now free and nil this object
FreeAndNil(myList);
// We can safely do this twice - it ignores nil objects
FreeAndNil(myList);
end;
No
exception occurs - the second FreeAndNil does nothing.