Zitat von
Muetze1:
/EDIT: Wenn du das Override nicht angibst, dann erhälst du zum einen einen Hinweis/Warnung vom Compiler und zum anderen wird dein Destructor nie ausgeführt.
Das bedarf aber noch ein paar Erklärungen.
Er wird nur dann nicht ausgeführt, wenn zum Freigeben von TMeinObjekt ein
MeinObjekt.Free benutzt wird.
Free ist von TObject geerbt und ruft eben nur den Destruktor
destroy von TObject auf, wenn dessen Virtualität nicht Rechnung getragen wird in den abgeleiteten Klassen. Durch ein override würde
MeinObjekt.Free den Destructor
destroy von TMeinObjekt aufrufen. Daher sollten Destruktoren in der Regel immer ihren Ahnen per override überschreiben. Eben weil sonst ein
Free den eigenen Destruktor nicht "erreichen" würde, sondern in TObject "hängenbleiben" würde.
Nun kann man aber locker auch den Destruktor direkt aufrufen, um ein TMeinObjekt freizugeben:
MeinObjekt.Destroy.
In diesem Fall würde der Destruktor von TMeinObjekt immer aufgerufen werden, ohne jegliche Relevanz dessen, ob er seinen Ahnen in TObject überschreibt oder nicht.
Allerdings ist diese Art des Destruktoren-Aufrufs nicht sooo sonderlich empfehlenswert, weil zuvor überprüft werden muss, ob MeinObjekt nicht schon nil ist. Nichts anderes macht nämlich TObject.Free.