C++学习笔记(四):虚析构函数
先看一下代码,使用的是虚析构函数
using namespace std;
class Base{
public:
virtual ~Base(){
cout << "~Base()" <<endl;
}
};
class D:public Base{
public:
~D(){
cout << "~D()" << endl;
}
};
int main()
{
Base *b = new D;
delete b;
return 0;
}
执行结果是:
~D()
~Base()
把virtual ~Basei()的virtual去掉后,执行结果是:
~Base()
在第一段代码中,delete b时,由于b是动态绑定,所以调用的是动态类型派生类的析构函数。
去掉virtuali的代码中,b非动态绑定,只能调用基类的析构函数,但实际分配的是派生类的空间,而清楚的对象却是基类的。
以上代码可以看出,当delete的时候,使用虚析构函数的可以安全的释放申请的空间,而不用虚析构函数的代码只析构基类的空间,造成内存泄漏。