Forum: Object-Pascal / Delphi-Language
by himitsu,
1. Jul 2022
Achso, da ist es doch vom Tempo her egal, ob Free oder FreeAndNil.
Dachte du meinst das FreeAndNil selber, also
try
blub.Free;
finally
blub := nil;
Forum: Object-Pascal / Delphi-Language
by himitsu,
1. Jul 2022
FreeAndNil hat doch kein Try-Finally drin?
Drum macht es ja eigentlich NilAndFree, im sich das Try-Finally zu sparen.
Einzig, wo es im FreeAndNil Probleme geben könnte, wenn im Destructor oder etwas darin Aufgerufenem oder anderem Freigegeben irgendwo auf diese (globale) Variable zugegriffen würde.
z.B. im OnDestroy der Form auf die Form-Variable, anstatt auf Self.
Hier ist die...
Forum: Object-Pascal / Delphi-Language
by himitsu,
28. Jun 2022
Nja, im Notfall kann man immer FreeAndNil machen, was nahezu nie verkehrt ist.
Während bei einem .Free das nötige Zurücksetzen der Variable eventuell fehlen könnte. (z.B. für nachfolgende if-Assigned)
Und
x.Free;
x := nil;
könnte zwar richtig sein, aber wenn es im Free knallt, dann würde das NIL nicht mehr ausgeführt.
Zu try
x.Free;
Forum: Object-Pascal / Delphi-Language
by himitsu,
24. Jun 2022
jupp, genau so.
Nur dasss ich meistens (noch) die Felder in Klassen wie lokale Variablen betrachte,
also eher davon ausgehe, dass nach dem Destroy niemand diese Variablen benutzen wird und somit dort nur .Free mache.
(in Punkto Fehlersuche kann dort aber ein NIL dann doch nicht schaden, weil ja doch noch wer die nun ungültige Objektvariable nutzen und auf den eventuell immernoch vorhanden...