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

C++学习笔记(四):虚析构函数

2012-10-30 10:25 225 查看
先看一下代码,使用的是虚析构函数

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的时候,使用虚析构函数的可以安全的释放申请的空间,而不用虚析构函数的代码只析构基类的空间,造成内存泄漏。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: