C++不要在构造函数和析构函数中调用virtual函数的原因

40 篇文章 4 订阅
19 篇文章 1 订阅

==child class在构造时,需要首先构造基类。在基类的构造期间,virtual函数的virtual性质是不能体现的,不能发生动态绑定,在构造函数中调用的virtual函数,难以确定是基类的还是子类的virtual函数。==

子类在其基类部分的构造期间,它的type就是基类而不是自身

==derived class在构造期间,首先构造基类部分,然后构造自身部分;当处于基类构造部分的时候,它就是子类,而不是自身type。这时,不论是RTTI还是typeid都会得到基类类型而不是自己这个派生类类型。==

子类在析构函数释放其子类部分后(剩余基类部分),它的type从自身的类型变成基类类型

==析构函数首先释放派生类部分,再释放基类部分。当派生类部分被释放后,剩下基类部分,此时,该对象的type从自身类型(派生类类型)变为基类类型;RTTI和typeid的结果也跟着发生变化。==

本人公众号:taojuxiu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值