Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Destructor: .Free oder .Destroy?

  Alt 21. Nov 2007, 09:58
Obwohl Manuel Deine Frage schon beantwortet hat, möchte ich noch mal ergänzen:

Aufrufen solltest Du immer Free (wie im Beitrag zuvor zu lesen, ruft Free für Dich Destroy auf). Selbst implementieren hingegen solltest Du als Destruktor immer Destroy.
Der Unterschied liegt darin, dass Free eine einfache Überprüfung durchführt, ob die Variable eine gültige Adresse referenziert. So werden Objekte mittels Create irgendwo im Speicher erzeugt und Dir wird eine Referenz (eine Art typisierter Zeiger auf ein Objekt) zurückgegeben. Als ungültig wird nur die Adresse nil erkannt, da hier garantiert kein Objekt liegen kann. Jede andere Adresse (also mind. 2^32 - 1) erscheint hingegen gültig. Wird also das Objekt hinter einer Variablen freigegeben und ist ein weiterer Zugriff auf diese Variable möglich (z.B. da sie einen globalen Scope besitzt), dann solltest Du dieser Variable anschließend nil zuweisen (oder FreeAndNil verwenden). Wird die Variable nicht mehr gelesen (z.B. weil sie nur lokal ist) oder wird ihr gleich im Anschluss ein neues Datum (mittels Create) zugewiesen, so ist das natürlich nicht nötig.

Gruß Der Unwissende
  Mit Zitat antworten Zitat