AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Destroy <-> Free

Ein Thema von tn249 · begonnen am 1. Feb 2005 · letzter Beitrag vom 1. Feb 2005
 
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.413 Beiträge
 
Delphi 12 Athens
 
#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 Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 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-2025 by Thomas Breitkreuz