c++ 析构函数为虚函数 可以防止内存泄露
来源:互联网 发布:pigalle红磨坊 知乎 编辑:程序博客网 时间:2024/05/29 18:46
我们来看一段代码
:
class CParent{char *m_Parent;public:CParent(){cout<<"Parent constructor"<<endl;m_Parent=new char[10];}~CParent(){cout<<"Parent DEconstructor"<<endl;delete m_Parent;}};class CHild:public CParent{char *m_CHild;public:CHild(){cout<<"CHild constructor"<<endl;m_CHild=new char[10];}~CHild(){cout<<"CHild DEconstructor"<<endl;delete m_CHild;}};int main(){CParent *parent; CHild *c=new CHild; parent=c; delete parent;return 0;}
代码运行结果为:
Parent constructor
CHild constructor
Parent DEconstructor
这里hi出现内存的泄漏,因为delete parent;只是调用了parent的析构函数,没有去掉用CHild的析构函数,那么CHild中的内存得不到释放,会造成内存泄漏。
将~CParent() 改为 virtual ~CParent() 之后的显示为:
Parent constructor
CHild constructor
CHild DEconstructor
Parent DEconstructor
这也是 MFC中Cbject得中的析构函数为虚函数的原因
- c++ 析构函数为虚函数 可以防止内存泄露
- 父类析构函数写成虚函数防止隐蔽的内存泄露问题
- 7.使用析构函数防止资源泄露
- 构造函数不能为虚函数,析构函数可以为虚函数
- 构造函数不能为虚函数,析构函数可以为虚函数
- 为什么构造函数不能声明为虚函数,析构函数可以声明为虚函数
- 将析构函数设置为虚函数,并且析构函数可以为纯虚函数
- 构造函数不能声明为虚函数,析构函数可以声明为虚函数
- 为什么构造函数不能为虚函数,而析构函数可以为虚函数?
- 为什么构造函数不能为虚函数,而析构函数可以为虚函数
- 析构函数为何可以为虚函数?
- (面试)析构函数可以为虚函数吗?
- 为什么析构函数可以为虚函数,什么情况下需要将析构函数定义为虚函数?
- 为什么不能把构造函数设为虚函数,却可以把析构函数设为虚函数
- 为什么构造函数不能声明为虚函数,析构函数可以
- 为什么构造函数不能声明为虚函数,析构函数可以
- 为什么构造函数不能声明为虚函数,析构函数可以
- 构造函数和析构函数可以声明为虚函数吗
- LIRe提供的6种图像特征描述方法的评测
- android菜单机制
- probe函数个人理解
- Missian指南三:创建一个Missian服务器(使用spring)
- 三大框架整合ssh(三)-----service层
- c++ 析构函数为虚函数 可以防止内存泄露
- xcode编译错误总结
- Paper Notes: On Community Detection in Real-world Networks and the Importance of Degree Assortativit
- get和post的区别
- android中异步加载类AsyncTask的使用
- 机器学习中的相似性度量
- Dom4j遍历解析XML测试
- ubuntu下的IP设置
- shell_cut 提取