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.


Anmelden zum Antworten