Zitat von
jbg:
..Man kann es nämlich mit FreeAndNil auch übertreiben...
Das könnte man wirklich unterschreiben.
Das Speichermanagement von Delphi ist nicht schlecht und macht vieles automatisch. Die Frage hat sich hier aber auch gestellt. Es gibt Destroy, Free, FreeAndNil. Genau ! Wo liegt jetzt der Unterschied ? Selbst mit Borland-Unterstützung war das nicht genau zu klären, was man nun am besten wo und wann verwenden soll. Bei allen drei Alternativen gab es hier und da einen Fehler. Je nach Konstellation.
Ist schon etwas länger her, aber ich glaube das auf NIL setzen reichte nicht aus, sofern darauf geprüft wird und ein zu entfernendes TObject ist nicht da. Bevor mir einen einen Strick daraus dreht : das nächste ist ohne Gewähr. Ist das TObject in keinster Weise initialisiert, dann kommen vermutlich Fehler. Folgende Konstruktion lief bisher ohne jeden Fehler :
Delphi-Quellcode:
if Objekt <> nil then begin
Objekt.Free;
Objekt := nil;
end;
Das FreeAndNil könnte da vielleicht eine Zeile sparen aber nicht ohne die Abfrage <> nil ! Damit wird aber jetzt nicht rumgespielt, denn es gilt : "Never change a running system".