Thema: Delphi Destroy <-> Free

Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Destroy <-> Free

  Alt 1. Feb 2005, 14:50
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:
  • Destroy Gibt das Object, für welches Destroy aufgerufen wird frei. Ist die Objekt-Referenz ungültig, bzw. nil, dann gibt es eine Access Violation (AV). Die Originalreferenz des Objektzeigers bleibt erhalten, ist jedoch ungültig.
  • Free Überprüft ob die übergebene Referenz nil ist. Wenn sie nicht nil ist, dann wird Destroy aufgerufen. Ein Großteil der AVs kann dadurch mit einfachsten Mitteln vermieden werden. Die Originalreferenz des Objektzeigers bleibt erhalten, ist jedoch ungültig.
  • FreeAndNil Kopiert die Object-Referenz in eine temporäre Variabel und löscht das Original (auf nil setzen). Dann wird Free aufgerufen. Die Originalreferenz des Objektzeigers ist gelöscht und somit leicht überprüfbar.

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 dann macht man es halt, ansonsten sollte man iA FreeAnNil oder Free nutzen.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat