![]() |
Destroy <-> Free
Hallo,
hab mal ne grundlegende Frage zu Destroy bzw Free: 1: Also wenn ich ein Objekt von TIniFile freigeben will, dann steht in der doku ich soll das mit free tun 2: bei den Indykomponenten (V9.0) steht in der doku nichts von free, dafür im source von IdHTTP.Destroy FreeandNil (kann man daraus folgern, dass man destroy aufrufen muss um das objekt freizugeben?) macht das jeder der ne komponente schreibt wie er will(also free oder destroy benutzen) wie mach ich das wenn ich eigene klasse schreibe am besten(so dass es alle verstehen) MfG tn249 |
Re: Destroy <-> Free
Hi,
Du solltest ein Objekt immer über .Free() freigeben. Denn TObject.Free macht im Prinzip nichts anderes als:
Delphi-Quellcode:
Und .Destroy() kann halt von jeder Klasse überschrieben werden und somit immer eigener Destruktor Code beim freigeben ausgeführt werden.
if Self <> nil then
Self.Destroy mfG mirage228 |
Re: Destroy <-> Free
was ist wenn meiner klasse direkt von TObject kommt, ist es dann egal ob ich free oder destroy nehme?
edit: und was macht das fürn sinn wenn die indyleute dann innerhalb von destroy nochmal free(andnil) ausführen??? |
Re: Destroy <-> Free
Zitat:
Zitat:
mfG mirage228 |
Re: Destroy <-> Free
jetzt hab ichs kapiert danke :wall:
:thumb: MFG tn249 |
Re: Destroy <-> Free
Fürn die eigentliche Freigabe von Objekten ist es egal, ob man FreeAndNil, Free oder Destroy nimmt. Es hängt auch von der Situation ab. Destroy braucht man meistens nicht, Free ist da vorzuziehen. Hier mal eine Liste wer was tut:
Wann nutzt man was. In normalen Anwendungen würde ich immer FreeAndNil empfehlen. Damit können die häufigsten AV-Fehler vermieden werden. Wenn ein Object andere Objecte referenziert, dann reicht der Aufruf auf Free, um die anderen Objekte freizugeben. Deren Zeiger müssen nicht mehr auf nil gesetzt werden, da das referenzierende Objekt später auch nicht mehr existiert und diese nicht referenziert werden. In extrem perfomance-saugenden Systemen ist evtl. ein Direktaufruf auf Destroy zu empfehlen, da der Vergleich auf nil sowie ein Extra-Methodenlookup/-sprung vermieden werden kann. Jedoch ist hiervon iA abzuraten, da mann dann immer 100%ig wissen muss, was mit einem Objekt gerade geschieht. Und nun zu Indy: eigentlich kann es uns egal sein, was die machen. Solange man selbst sauber arbeitet sind deren Methoden nebenranging. Wenn für bestimmte Objekte Destroy empfohlen wird :gruebel: dann macht man es halt, ansonsten sollte man iA FreeAnNil oder Free nutzen. ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz