虚析构函数
2014-06-27 16:41
253 查看
构造函数不能声明为虚函数,但是析构函数可以声明为虚函数。且当基类析构函数为虚函数时,由它派生的子类的析构函数也都是虚函数。此时,当基类类型的指针指向派生类的对象时,可以动态绑定,且调用析构函数的顺序是先调用派生类析构函数,再调用基类的析构函数,这个刚好和调用派生类构造函数的顺序相反。
当基类析构函数不是虚函数时,调用结果如下:
该结果表明当基类析构函数不是虚函数时,delete 时函数只调用了基类的析构函数,这样如果派生类析构函数有需要对内存的释放时,会造成内存泄露。
#include <iostream> using namespace std; class base { public: base(){cout << "base's gouzao fuc " << endl;} virtual ~base(){cout << "base's xigou fuc " << endl;} }; class derived : public base { public: derived(){cout << "derived's gouzao fun" << endl;} ~derived(){cout << "derived's xigou fun" << endl;} }; int main() { base * p = new derived(); delete p; cout << endl; base * q = new base(); delete q; system("pause"); return 0; }运行上面代码,结果如下:
当基类析构函数不是虚函数时,调用结果如下:
该结果表明当基类析构函数不是虚函数时,delete 时函数只调用了基类的析构函数,这样如果派生类析构函数有需要对内存的释放时,会造成内存泄露。
相关文章推荐
- 20154:补足程序4(虚析构函数)
- 从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图
- 虚析构函数的作用
- C++中基类的析构函数为什么要用virtual虚析构函数
- C++继承中析构函数 构造函数的调用顺序以及虚析构函数
- 对于虚析构函数的理解
- 深入探究C++中虚函数和虚析构函数的实现原理
- 使用虚析构函数的原因
- 虚析构函数
- C++中的虚析构函数
- 基类虚析构函数。
- 面试归来--基类虚析构函数
- 关于C++虚析构函数
- 关于虚析构函数
- 为什么要用“虚析构函数”?
- 个人对继承理解以及虚析构函数的理解
- 虚析构函数和protected析构函数
- 设计代码之虚析构函数
- 条款07:为多态基类声明虚析构函数
- C++ 虚析构函数