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的时候,使用虚析构函数的可以安全的释放申请的空间,而不用虚析构函数的代码只析构基类的空间,造成内存泄漏。
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的时候,使用虚析构函数的可以安全的释放申请的空间,而不用虚析构函数的代码只析构基类的空间,造成内存泄漏。
相关文章推荐
- C++学习笔记 -- 虚析构函数与纯虚析构函数
- C++学习笔记 -- 虚析构函数与纯虚析构函数
- C++学习笔记-----存在多态调用时,为基类定义虚析构函数
- C++学习笔记 -- 虚析构函数与纯虚析构函数
- C++学习笔记 -- 虚析构函数与纯虚析构函数
- C++学习笔记——虚析构函数
- C++学习笔记 -- 虚析构函数与纯虚析构函数
- C++学习笔记:虚析构函数
- 深入浅出Windows 10 通用应用开发学习笔记(C++) 3-1
- 【C++数据结构学习笔记---线性表】用单链表实现线性表
- 【C/C++学习笔记】结构体的位域操作小结
- c++学习笔记(五)
- 【C++】学习笔记草稿版15(多态)
- VS2010 C++ 学习笔记(四) 1.数据的封装 2.类外定义 3.构造函数(无参,有参,重载,初始化列表,拷贝) 4.练习
- C++学习笔记(八) 智能指针
- C++ 学习笔记(3) const_cast
- c++学习笔记之关联容器
- C++ 类学习笔记一
- 2012/1/11 《C++ Primer Plus》第四章:复合类型 学习笔记
- C++(VC 2005)学习笔记