您的位置:首页 > 编程语言 > C语言/C++

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

2015-12-25 17:05 330 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: