C++中虚析构函数

参考:C++中的动态类型与动态绑定、虚函数、运行时多态的实现_IIcyZhao's Road-CSDN博客

参考:C++中虚析构函数的作用及其原理分析_哒哒的博客-CSDN博客_虚析构函数的作用

动态绑定与静态绑定

动态绑定:就是基类的指针或引用有可能指向不同的派生类对象。

对于非虚函数,执行时实际调用该函数的对象类型即为该指针或引用的静态类型(基类类型)

只有虚函数才能进行动态绑定,非虚函数不进行动态绑定。

#include<iostream>
using namespace std;

class ClxBase
{
    public:
        ClxBase() {};
        virtual ~ClxBase() { cout<<"delete ClxBase"<<endl; };

        virtual void DoSomething() { cout << "Do something in class ClxBase!" << endl;  };

};

class ClxDerived : public ClxBase
{
    public:
        ClxDerived() {};
        ~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl;  };

        void DoSomething() { cout << "Do something in class ClxDerived!" << endl;  };

};

int main(int argc, char const* argv[])
{
     ClxBase *pTest = new ClxDerived;
     pTest->DoSomething();
     delete pTest;
    return 0;
}

一般在开发过程中的基类的析构函数需要写为virtual函数,

原因是有一种异常情形:当通过多态,把派生类对象指向基类,再去delete这个对象,也就是上述的delete pTest; 删除的是基类的指针。而且这个基类和派生的析构函数没有关系(不是virtual的),子类和父类的析构函数没有动态绑定, 所以只会调用基类的析构函数,不调用派生类的析构函数而多态中:基类的析构函数与派生类的析构函数并没有绑定到一起。所以会使得父类的析构函数不被调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值