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得中的析构函数为虚函数的原因