虚析构函数的作用与理解

基类的析构函数一般都会被声明成虚函数,原因是,若是不设置成虚函数,在实现多态时,将子类对象赋给基类指针,在析构的过程中,只会调用基类的析构函数进行清除工作,而不会调用派生类的析构函数。

代码示例说明:

class Base
{
public:
    Base(){};
    ~Base(){cout<<"Base destructor"<<endl;}

    virtual void Show(){cout<<"Base Show"<<endl;}
};

class Derived:public Base
{
public:
    Derived(){};
    ~Derived(){cout<<"Derived destructor"<<endl;}

    virtual void Show(){cout<<"Derived Show"<<endl;}
};

Base* pBase = new Derived();
pBase->Show();
delete pBase;

输出:
Derived Show
Base destructor
说明析构的时候,派生类的析构函数没有被调用,这样就只是析构了对象基类的部分,派生的部分没有被析构,就会造成内存泄漏。

若是将Base类的析构函数改成虚函数,就会输出:
Derived Show
Derived destructor
Base destructor
说明此时,new的对象被完整的析构

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:新浪博客 | zjdtc | 虚函数与构造函数、析构函数 | 2011-06-22本文在原文之上,增加了...
    蓝雪冬荷阅读 1,024评论 0 0
  • 为什么构造函数不能声明虚函数 在C++中,构造函数用于在创建对象时进行初始化工作,不能声明为虚函数。因为在执行构造...
    tomchan阅读 280评论 0 1
  • C++ 面向对象编程 博客园地址:http://www.cnblogs.com/xiongxuanwen/p/42...
    先之阅读 693评论 0 1
  • 文/玥姝 诗,我是因了偶尔有的赏词的乐趣,便会来欣赏的——古词更“平易近人”,语文课时喜欢柳永,李清照,因为不需要...
    玥姝阅读 680评论 0 6
  • 文/唐妈 老郑应该还是不够信任许岩,只是让许岩管押货一个环节,怎么提货就从来没跟许岩提过。 这天晚上,许岩又开着车...
    唐妈阅读 4,422评论 62 81