虚析构函数
来源:互联网 发布:创维网络机顶盒e900 编辑:程序博客网 时间:2024/06/01 17:20
之前讲过了虚函数,其实实现面向对象多态特性的机制。
那多态性里还有重要的一点便是虚析构函数。
接下来看问题重现:
#include <iostream>using namespace std;class Cparent{public: Cparent() { cout<< "Cparent::constructor is called" <<endl; } ~Cparent() { cout<<"Cparent::destructor is called"<<endl; }};class Cchild: public Cparent{ char *p;public: Cchild() { p = new char[20]; cout<<"Cchild::construct is called"<<endl; } ~Cchild() { delete p; cout<<"Cchild::destructor is called"<<endl; }};int main(){ Cparent *pParent; Cchild *pChild = new Cchild(); pParent = pChild; delete pParent; return 0;}
大家能看出这里产生的内存泄漏问题么?
运行结果:
Cparent::constructor is called
Cchild::construct is called
Cparent::destructor is called
看得出我们只调用了父类的析构函数,而并没有调用子类的析构函数,造成子类构造函数里new的内存无法释放。这是因为当pChild指针赋值给pParent后,而编译器由静态联编只调用了父类的构造函数,因此我们需要动态绑定让其调用子类的析构函数,那么就需使用virtual关键字。
0 0
- 虚析构函数、纯虚析构函数
- 虚析构函数,纯虚析构函数~~~
- 构造函数 虚函数 虚析构函数
- 虚析构函数、纯虚析构函数、虚构造函数
- 纯虚函数、虚函数、虚析构函数
- 虚析构函数、纯虚析构函数、虚构造函数
- 虚函数,虚析构函数,虚函数表
- 虚析构函数、纯虚析构函数、虚构造函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- 虚析构函数
- Android工具HierarchyViewer 代码导读
- 免费馅饼 (hdu 1176 简单DP)
- 运算符总结
- ionic android下tab位置问题
- Unity UGUI——Text组件(Character)
- 虚析构函数
- 神经网络总结
- 总结之java
- Android 内存溢出问题
- Eclipse设置:背景与字体大小和xml文件中字体大小调整
- MARYLAND/Software Security 摘要与感悟(4)
- xcode6如何添加并配置pch文件
- 装饰设计模式、LineNumberReader
- 从字串的单词倒序算法到C#字串处理