Die Kombination auf .free und := NIL führt letzendlich zum Erfolg
Delphi behält freigegebenen Speicher noch etwas, für den Fall dass der in Kürze wieder gebraucht wird. So muss dieser nicht immer neu alloziiert werden -> schneller. Somit sind die Adressen deines Objektes noch gültig, auch wenn du es schon gefreet hast. Setzt du aber gleich noch Objekt := NIL, dann ist sicher gestellt, dass du nicht mehr auf ein eigentlich nicht mehr existierendes Objekt zugreifen kannst. Ab Delphi 6 oder 7 gibts auch die Methode FreeAndNil(TObject). Die macht intern nichts anderes als das was ich grad schrieb
sieht nur schicker aus.
\\edit: Nur mit Objekt := NIL erzeugst du dir nen Speicherleck. D.h. du hast keinen Verweis mehr auf das Objekt, aber der Speicher wurde auch nicht freigegeben. Somit bleibt der Speicher bis zum Programmende belegt, und du kommst nie wieder dran. Das wäre die schlechteste Lösung. Java hingegen erkennt dass, und gibt den Speicher selbst frei sobald kein Zeiger mehr darauf existiert. Auch .NET arbeitet so (GarbageCollection bzw. Referenzzählung sind die Stichworte, und datt gibbet bei
Win32 (mit Ausnahmen) nicht).
gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel