/*
下面程序一个A类析构函数是虚函数,为什么这么做呢?
我们可以看下后面的运行结果
总结,我发现在使用多态的时候,如果基类析构不是虚函数
那么子类将不会被析构,从而会造成内存泄露等问题。非常危险
*/
#include "iostream"
using namespace std;
class A
{
public:
A(){cout<<"构造A"<<endl;}
virtual ~A(){cout<<"析构A"<<endl;}
};
class B:public A
{
public:
B(){cout<<"构造B"<<endl;}
~B(){cout<<"析构B"<<endl;}
};
static void show(A *p)
{
delete p;
}
int main(int argc, char const *argv[])
{
/* code */
//多态
show(new B());
return 0;
}
/*
输出:
构造A
构造B
析构B
析构A
*/
/*
把A类析构函数virtual去掉
输出:
构造A
构造B
析构A
我们发现B没有被析构,很可怕是把,这也许就是你的程序那些不为人知的小BUG了。
*/
虚析构函数的重要性
最新推荐文章于 2024-08-21 08:30:00 发布