Groups | Search | Server Info | Login | Register


Groups > de.comp.lang.delphi.misc > #19226

Free und FreeAndNil

From Jens Kallup <kallup.jens@web.de>
Newsgroups de.comp.lang.delphi.misc
Subject Free und FreeAndNil
Date 2022-04-12 11:13 +0200
Organization kallup.net - non-profit
Message-ID <jbku65Fij5tU1@mid.individual.net> (permalink)

Show all headers | View raw


[Multipart message — attachments visible in raw view] - view raw

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

Back to de.comp.lang.delphi.misc | Previous | NextNext in thread | Find similar


Thread

Free und FreeAndNil Jens Kallup <kallup.jens@web.de> - 2022-04-12 11:13 +0200
  Re: Free und FreeAndNil Holger Schieferdecker <spamless@gmx.de> - 2022-04-13 09:04 +0200

csiph-web