Re: unsichtbare Klassen
Zitat:
Delphi-Quellcode:
;)
destructor Destroy; virtual;
greetz Mike |
Re: unsichtbare Klassen
Jason, ich meine das hier :
Delphi-Quellcode:
Delphi wird das schon schlucken. Nur, was soll das ?
type
TFIFO = class destructor Destroy; override; end; |
Re: unsichtbare Klassen
Zitat:
greetz Mike |
Re: unsichtbare Klassen
Dann zeige mal wo der sein soll. :zwinker: Mittlerweile auch gemerkt, dass da was nicht stimmt ? :mrgreen: Oder, was habe ich in Object-Pascal wann verpasst ?
|
Re: unsichtbare Klassen
In TObject? :gruebel:
|
Re: unsichtbare Klassen
Zitat:
Hier hab ichs schon mal geschrieben: TObject enthaelt einen virtuellen Destruktor:
Delphi-Quellcode:
greetz
Type
TObject = Class Public destructor destroy;virtual; Mike |
Re: unsichtbare Klassen
Blinde Kuh ? Ja wär doch gut. :lol:
Nächster Versuch :
Delphi-Quellcode:
Erkläre mir mal bitte, warum da ein Destructor einer leeren Class TFIFO (also ohne Vorfahr) per override überschrieben werden muss. Mehr will ich gar nicht wissen. Wer soll mit dem "override" denn überhaupt angesprochen werden ? :shock:
type
TFIFO = class private Type TNode = class private FNext: TNode; FObject: TObject; public constructor Create(AObject: TObject); destructor Destroy; override; end; |
Re: unsichtbare Klassen
Zitat:
gute Nacht Mike |
Re: unsichtbare Klassen
Ich hänge dazu nochmal schnell die Meinung der OH an, welches dies auch ausdrücklich beschreibt:
Zitat:
/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. |
Re: unsichtbare Klassen
Zitat:
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. :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz