Destruktoraufruf
-
Hi, ich habe eine Klasse A die von der Basisklasse Base erbt:
class Base { public: Base() {} ~Base() {MessageBox(0, "Base::~Base();", 0, 0);} virtual void Report() { MessageBox(0, "Base::Report();", 0, 0); } }; class A : public Base { public: A() {} ~A() {MessageBox(0, "A::~A();", 0, 0);} void Report() { MessageBox(0, "A::Report();", 0, 0); } };(Es gibt später auch noch eine Klasse B die von A erbt, und manchmal wird ein Object von A benötigt, manchmal eins von B, deshalb der "Base Pointer"!
Nun erstelle ich ein Object der Klasse A, allerdings über einen "Base Pointer"!
Base *ptr = new A(); ptr -> Report(); // A::Report() wird aufgerufen delete ptr;Mein Problem ist dass beim löschen von ptr nur der Destruktor der Base Klasse aufgerufen wird, nicht aber der von Klasse A.
Beim erstellen von ptr wird der Konstruktor von A allerdings aufgerufen.Meine Frage ist nun ob das so zulässig ist wenn ich eine extra Methode als Destruktor für A Implementiere (so wie A::Report(); ) und diese vorm Löschen des Objects manuell aufrufe?
Oder weiß jemand ne elegantere Lösung?
-
Destruktor virtuell machen du Honk! Ist wie bei den anderen Methoden auch...
-
Müsst ihr immer so nett sein?
Naja, wenigstens stimmts...