Zitat von
Hansa:
Also ist das ein Nachfahre von TObject. [...] Warum soll jetzt da nochmals ein leerer Destructor per override auch noch überschrieben werden ?
Hmm, ein paar
OOP-Tutorials wuerden dir nicht schlecht tun:
Du hast eine beliebige Klasse, bspw. TMeineKlasse. Im Konstruktor dieser Klasse wird bspw. Speicher allociert, oder irgendetwas instanziert, das im Destruktor wieder freigegeben werden muss.
Nun gibts 2 Moeglichkeiten:
Delphi-Quellcode:
//1.
destructor Destroy();
//2.
destructor Destroy(); override;
Du behauptest, zweiteres mache keinen Sinn. Analysieren wir mal, was die unterschiede sind:
Wenn eine Variable als TMeineKlasse deklariert ist, macht es keinen Unterschied.
Wenn aber eine Variable
nicht als TMeineKlasse, sondern als Vorfahre (bspw. TObject) deklariert ist, aber als TMeineKlasse
instanziert wurde, muss auch der Destruktor von TMeineKlasse aufgerufen werden.
Passiert das aber? Nein.
Delphi-Quellcode:
TMeineKlasse = class
constructor Create();
destructor Destroy();
speicher: Pointer;
end;
//...
constructor TMeineKlasse.Create();
begin
speicher = allocmem(100);
end;
destructor TMeineKlasse.Create();
begin
freemem(speicher);
end;
procedure ProbiersAus();
var
x: TObject;
begin
x := TMeineKlasse.Create();
x.Free(); //Es wird TObject.Free aufgerufen!
end;
Gibt ein schoenes Speicherleck. mit dem ueberschreiben des Destruktors passiert das nicht.
greetz
Mike