C++虚析构函数

在实现多态时候,基类的析构函数应该写成virtual。在用基类申明实例化的子类对象,在delete时候,如果基类不是virtual的析构函数则不能调用进子类的析构函数

 

class Base{

public:

   Base();

   virtual ~Base();

public:

   char *m_pName;

};


Base::Base(){

    cout<<"Base()"<<endl;

   m_pName = new char[1024];

   memset(m_pName, 0, 1024);

}


Base::~Base(){

   cout<<"~Base()"<<endl;

   if (m_pName) {

       delete [] m_pName;

       m_pName = NULL;

    }

}


class Child:public Base{

public:

   Child();

   ~Child();

public:

   char *m_pAge;

};

Child::Child(){

   cout<<"Child()"<<endl;

   m_pAge = new char[2048];

   memset(m_pAge, 0, 2048);

}


Child::~Child(){

   cout<<"~Child()"<<endl;

   if (m_pAge) {

       delete [] m_pAge;

       m_pAge = NULL;

    }

}

 

int main(){

   Base *pBase = new Child();

   delete pBase;

}

 

输出如下:

Base()

Child()

~Base()

 

这样导致内存泄漏,因为子类的析构函数没有被调用。

修改这类问题,把基类析构函数声明为virtual.

 

class Base{

public:

   Base();

   virtual ~Base();

public:

   char *m_pName;

};

 

输出:

Base()

Child()

~Child()

~Base()

 

在没有virtual修饰下,是子类析构函数没有被调用。



文章来源

http://www.cnblogs.com/zhidao-chen/p/3830174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值