C++ 为什么要virtual析构函数

class A
{
public:
    A()
    {
        printf("A()\n");
    }
    virtual ~A()
    {
        printf("~A()\n");
    }
};

class B
{
public:
    B()
    {
        printf("B()\n");
    }
    ~B()
    {
        printf("~B()\n");
    }
};

class C:public A, public B //继承用“,”隔开每个类前面必须有public否则默认为private
{
public:
    C()
    {
        printf("C()\n");
    }
    ~C()
    {
        printf("~C()\n");
    }
};



int _tmain(int argc, _TCHAR* argv[])
{
    {
        C c; //可以正确构造和析构
    }
    {
        A *a = new C;
        delete a;//有virtual会一次调用C,A,B的析构函数,正确执行
    }
    {
        B *b = new C;
        delete b;//没有virtual会直接调用B的析构,不会调用A,C的析构函数错误
    }
    getchar();
    return 0;
}

 

posted @ 2015-12-25 17:05  qijinbiao1  阅读(212)  评论(0编辑  收藏  举报