Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Interessant was sich aus der Frage alles so ergibt!
Aber meine Detailfrage ist nun immer noch nicht vollständig beantwortet: Ich habe eine Klasse TMyVar mit einem Member vom Typ TStringlist. Diese Member wird im Konstruktor meiner Klasse ordnungsgemäß erzeugt. Jetzt benutze ich die Klasse in einer function/procedure:
Delphi-Quellcode:
Ist nun Variante a), b) notwendig oder muss man c) gar nichts damit machen, da am Ende der Methode die lokale Variable myVar automatisch einen .Free-Aufruf erhält?
procedure TForm1.Beispiel;
var MyVar: TMyVar; begin MyVar:=TMyVar.Create; // hier passiert dann mal was... ... // hier ist das Ende der Procedur: FreeAndNil(MyVar); // a) MyVar.Free; // b) // c) end; Gruß, Christoph |
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Zitat:
|
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Kann man bei Records, Strings und dynamischen Arrays nicht von Garbage Collection sprechen?
|
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Zitat:
|
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Zitat:
|
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Hallo Kha..,
was heisst, muss nicht sein ? Schon klar, dass man sowas vermeiden sollte. Es ist aber so, dass FreeAndNIL nicht initialisierte Objekte nicht erkennen kann. Dafür gibt es ja dass NIL setzen. Zum "Was sollte man nehmen". Destroy nie direkt aufrufen. Zum Freigeben .Free benutzen, falls das Objekt später nicht mehr benutzt wird, weil es z.B. eine lokale Variable ist. FreeAndNIL fasst 2 Befehle zusammen (Free and NIL, wer hätte das gedacht ;) ), macht also Sinn, wenn das Objekt mehrfach verwendet werden kann. Wir ein Objekt über lokale Variable erzeugt und nicht freigegeben, bleibt der Speicher belegt, bis das Programm beendet wird (nicht unter Win9X). Wenn ich also so eine Prozedur 1 Mio. mal im Programm benutze, frisst die jedes mal Speicher. Und irgendwann sind auch 2 Gig weg. Heiko |
Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz