美文网首页
虚析构函数的作用与理解

虚析构函数的作用与理解

作者: Roling | 来源:发表于2016-11-17 15:18 被阅读0次

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

代码示例说明:

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的对象被完整的析构

相关文章

  • 虚析构函数的作用与理解

    基类的析构函数一般都会被声明成虚函数,原因是,若是不设置成虚函数,在实现多态时,将子类对象赋给基类指针,在析构的过...

  • 2020-02-10 C++基础2

    1:为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数? 将可能会被继承的父类的析构函数设置为虚...

  • 真正理解虚析构函数

    在我真正理解虚析构函数之前,差不多每隔一个月,我都要百度一下“虚析构函数的作用”。因为我在写一个类时,总是不能确定...

  • C++虚函数的一些奇怪问题总结

    构造函数能否为虚函数?在构造函数中调用虚函数会如何?析构函数能否为虚函数?析构函数能否为纯虚函数?其实日常开发中基...

  • C++的虚析构函数

    首先,我们必须知道,虚析构函数是有其本身的目的,所以正常情况下,我们不应该声明虚析构函数。 构造函数和析构函数是一...

  • c++primer 15.24-15.30

    15.24基类一般定义一个虚析构函数但是虚析构函数会阻止移动操作但是虚析构函数会帮助基类派生类体系动态销毁对象15...

  • C++中,构造函数不能设为虚函数,基类析构函数应该设为虚函数

    构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用...

  • C++第9天: 第137-第142课 纯虚函数,抽象类,虚析构,

    纯虚析构,防止父类指针无法访问子类析构函数

  • g2o CurveFittingEdge

    构造函数与析构函数:C++大括号{}有作用于,在作用域范围结束时,调用结构体的析构函数,构造函数是与类同名人那个函...

  • 虚析构函数的作用

    不要被这个名字吓住,其实他就是普通的析构函数变“虚”了,也就是增加了多态性。它的主要功能就是确保继承体系中的对象正...

网友评论

      本文标题:虚析构函数的作用与理解

      本文链接:https://www.haomeiwen.com/subject/hhbdpttx.html