Forum: Object-Pascal / Delphi-Language
by IngoD7,
20. Feb 2007
Jetzt noch zum Thema zurück? :twisted: :wink:
Kannst du den Thread aufteilen und diesen Teil mit Titel "Warum virtuelle Destructoren?" (oder so ähnlich) abhängen? Wäre vielleicht ganz nützlich, dieses Offtopic hier zu Ontopic woanders zu machen. ;-)
Danke.
Forum: Object-Pascal / Delphi-Language
by IngoD7,
19. Feb 2007
Darum geht es doch gar nicht.
Du willst wissen, wie es sich mit virtuellen Methoden und override verhält? Fein. Steht hier in diesem Thread jetzt doppelt und dreifach. Lies in. ;-) In der Hilfe steht das ebenfalls recht ansprechend beschrieben. Die Geschichte mit Free ist zudem ein sehr schönes Beispiel für die Implemetierung in einer Klassenhierarchie. Kann man herrlich ausprobieren und (auch...
Forum: Object-Pascal / Delphi-Language
by IngoD7,
19. Feb 2007
Moin Hansa,
das ist ungefähr das, was JasonDX meinte. Der direkte Aufruf von Destroy in deinem Beispiel verhält sich so, wie du sagst. Was anderes hatte JasonDX auch nicht behauptet.
Jetzt gibt es aber Fälle, wo (jetzt bezogen auf dein Beispiel) nicht
var MeineKlasse : TMeineKlasse;
sondern
var MeineKlasse : TObject;
gesetzt wird, und dennoch wie folgt created wird:
MeineKlasse :=...
Forum: Object-Pascal / Delphi-Language
by IngoD7,
19. Feb 2007
@JasonDX
Doch. Bei Benutzung von Free macht es immer einen Unterschied. Es gibt in der Regel nur das eine, geerbte Free in TObject. Das wird auch angesprungen wenn ein TMeineKlasse.Free aufgerufen wird. Und dieses angesprungenen TObject.Free würde jetzt nur den eigenen Destructor (in TObject) aufrufen, wenn der Destructor der abgeleiteten Klasse TMeineKlasse kein override besitzt. Und das...
Forum: Object-Pascal / Delphi-Language
by IngoD7,
19. Feb 2007
Deshalb:
Probiere es aus. :)
Forum: Object-Pascal / Delphi-Language
by IngoD7,
19. Feb 2007
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...