Jens Kallup
2022-04-12 09:13:41 UTC
Hallo,
in Àlteren Versionen von Delphi hatte ich immer im dtor
Free benutzt, um ein Objekt bzw. die Referenz darauf zu
löschen bzw. den belegten Speicher durch das OS wieder
freizugeben.
Allerdings kommen nun neuere Versionen (so ab Version 5)
mit der Funktion FreeAndNil daher.
Was ist an dieser Funktion anders als an Free ?
In Àlteren Quellcodes hatte ich fast nie folgende zwei-
liner verwendet:
obj.Free;
obj := nil;
Ich nehme mal an das FreeAndNil das gleiche macht.
Alllerdings wÃŒrde es mich mal interessieren, ob man denn
in den Àlteren Versionen tatsÀchlich von "obj := nil;"
abhÀngig war ?
Weil, in neueren Version (ich verwende gerade Delphi 7)
es dazu fÃŒhren kann, das man zwar den Speicher mit .Free
freigibt, aber der Zeiger auf das Objekt zeigt oder gar
manchmal auf eine andere Adresse im Speicher, wie ich das
so auch schon feststellen konnte.
Erst durch die Verwendung von FreeAndNil kann ich sicher
sein, das ich mit:
if obj = nil then obj := TObj.Create;
a) abfragen kann, das "obj" tatsÀchlich "null" ist, um
im Anschluà dann
b) das "obj" mit Create neu erstellen kann, sofern es dann
gebraucht wird.
Mit freundlichen GrÃŒÃen
Jens Kallup
in Àlteren Versionen von Delphi hatte ich immer im dtor
Free benutzt, um ein Objekt bzw. die Referenz darauf zu
löschen bzw. den belegten Speicher durch das OS wieder
freizugeben.
Allerdings kommen nun neuere Versionen (so ab Version 5)
mit der Funktion FreeAndNil daher.
Was ist an dieser Funktion anders als an Free ?
In Àlteren Quellcodes hatte ich fast nie folgende zwei-
liner verwendet:
obj.Free;
obj := nil;
Ich nehme mal an das FreeAndNil das gleiche macht.
Alllerdings wÃŒrde es mich mal interessieren, ob man denn
in den Àlteren Versionen tatsÀchlich von "obj := nil;"
abhÀngig war ?
Weil, in neueren Version (ich verwende gerade Delphi 7)
es dazu fÃŒhren kann, das man zwar den Speicher mit .Free
freigibt, aber der Zeiger auf das Objekt zeigt oder gar
manchmal auf eine andere Adresse im Speicher, wie ich das
so auch schon feststellen konnte.
Erst durch die Verwendung von FreeAndNil kann ich sicher
sein, das ich mit:
if obj = nil then obj := TObj.Create;
a) abfragen kann, das "obj" tatsÀchlich "null" ist, um
im Anschluà dann
b) das "obj" mit Create neu erstellen kann, sofern es dann
gebraucht wird.
Mit freundlichen GrÃŒÃen
Jens Kallup