首页 > 编程语言 > 详细

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

时间:2015-12-25 18:45:23      阅读:266      评论:0      收藏:0      [点我收藏+]
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;
}

 

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

原文:http://www.cnblogs.com/qijinbiao/p/5076437.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!