分享

C 里面的虚析构函数

 菌心说 2022-05-16 发布于北京

C++的虚构函数可以定义为虚函数,这个在类需要继承的时候是至关重要的。

比如:

#include <iostream>using namespace std;class Base {public: void hello() { cout << 'helloworld' << endl; }};class Derived: public Base {public: Derived(): Base() { } ~Derived() { cout << 'Derived destructor.' << endl; }};int main() { Base* pBase = new Derived(); pBase->hello(); delete pBase; return 0;}
文章图片1

可以看到,Base class没有定义析构函数函数,当我们delete的时候使用Base的指针的时,Derived类的析构函数不会被调用。

文章图片2

现在我们定义一个析构函数:

class Base {public:    void hello() {        cout << 'helloworld' << endl;    }    ~Base() {        cout << 'Base destructor' << endl;    }};
文章图片3

运行结果如下,可以看到Base的析构函数确实被调用了,但是Derived析构函数还是没有调用。

文章图片4

最好我们把析构函数申明为虚函数:

class Base {public: void hello() { cout << 'helloworld' << endl; } virtual ~Base() { cout << 'Base destructor' << endl; }};
文章图片5

这次才真正把子类的析构函数给调用了:

文章图片6

所以在C++语言里面,如果没有特殊原因,还是建议把析构函数定义为虚函数。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多