首页 > 代码库 > c++ 虚析构函数
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修饰下,是子类析构函数没有被调用。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。