D'tor wird nicht aufgerufen
-
wenn ich CBase erstelle und davon CDerived ableite...
class CBase { public: virtual void test() = 0; } class Derived : public CBase { public: Derived() { MessageBox(NULL, "Derived::Derived()", "", MB_OK); } ~Derived() { MessageBox(NULL, "Derived::~Derived()", "", MB_OK); } void test() { MessageBox(NULL, "Derived::test()", "", MB_OK); } }
und dann Instanz erstelle...
CBase *p = new CDerived; p->test(); delete p;
wird das hier aufgerufen:
"Derived::Derived()"
"Derived::test()"aber nicht der D'tor
"Derived::Derived()"
wieso ? was muss man das ändern, damit der Destruktor auch aufgerufen wird ?
-
Weil der Destruktor von CBase nicht virtuell ist.