Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Gibt TObject Speicherplatz wieder frei ?

  Alt 19. Aug 2005, 22:24
Mann, seid ihr flott.

Aber was hat das hier zu bedeuten :

Zitat von DH:
Rufen Sie Destroy nicht direkt auf. Verwenden Sie stattdessen Free. Die Methode Free überprüft, ob die Objekt-Referenz nicht bereits nil ist und ruft Destroy nur bei Bedarf auf.

Die in TObject definierte Version von Destroy gibt den Speicher frei. Abgeleitete Objekte definieren normalerweise einen eigenen Destruktor.

Wenn Sie eine Methode Destroy in einem abgeleiteten Objekt deklarieren, beachten Sie folgendes: Fügen Sie in die Deklaration immer die Direktive override ein, und rufen Sie als letzte Anweisung in der überschriebenen Methode die geerbte Version von Destroy auf. Da Destroy eine virtuelle Methode ist, stellen Sie durch Überschreiben der Methode sicher, dass das gewünschte Verhalten auftritt.

Hinweis: Wenn ein Konstruktor eine Exception nicht behandelt, wird der Destruktor aufgerufen, der die unvollständig initialisierte Objektinstanz wieder freigibt. Deshalb sollten Destruktoren vor der Freigabe überprüfen, ob die zugewiesenen Ressourcen, wie z.B. Handles, tatsächlich zugewiesen wurden (deren Wert könnte Null sein).

Die Methode Destroy sollte so implementiert werden, dass sie Free für Unterobjekte aufruft, die durch den Objektkonstruktor erzeugt (zugewiesen) wurden. Im Gegensatz zu Destroy besitzt Free einen Sicherheitsmechanismus für die Freigabe von Objekten, die nil sind.
An anderer Stelle steht auch noch, man solle Create nicht explizit aufrufen. Habe jetzt noch in funktionierendem Programm nachgesehen, wie ich es da gemacht habe. Und zwar mit Destroy und nachfolgendem := NIL. Weiß jetzt nicht mehr genau warum, aber daran war Borland höchstpersönlich beteiligt !
Gruß
Hansa
  Mit Zitat antworten Zitat