C++中为什么析构函数是虚函数

如果基类的析构函数不是虚函数,在特定情况下会导致派生来无法被析构。

情况1:用派生类类型指针绑定派生类实例,析构的时候,不管基类析构函数是不是虚函数,都会正常析构

情况2:用基类类型指针绑定派生类实例,析构的时候,如果基类析构函数不是虚函数,则只会析构基类,不会析构派生类对象,从而造成内存泄漏。为什么会出现这种现象呢,个人认为析构的时候如果没有虚函数的动态绑定功能,就只根据指针的类型来进行的,而不是根据指针绑定的对象来进行,所以只是调用了基类的析构函数;如果基类的析构函数是虚函数,则析构的时候就要根据指针绑定的对象来调用对应的析构函数了。

上一篇文章说到,虚函数在派生类和基类中需要函数名字和参数表都相同,但是这里的虚析构函数显然在每个类中是不一样的,可能是析构函数比较特殊吧。另外构造函数不可以是虚函数,为什么呢,因为类的虚函数表指针是在构造函数中初始化的,这时候入股构造函数本身是虚函数,又应该有谁来初始化它的虚函数指针呢,所以构造函数不能是虚函数。构造函数和析构函数中也不能调用虚函数,调用了也没用,一个是虚函数表指针还没有初始化好,一个是可能虚函数指针已经被析构了。

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值