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...


Anmelden zum Antworten