首页 > 代码库 > effective c++ 条款9 do not call virtual function in constructor or deconstructor
effective c++ 条款9 do not call virtual function in constructor or deconstructor
在构造函数中不要调用virtual函数,调用了也不会有预期的效果。
举个例子
class Transaction{ public: Transaction() { log(); } virtual void log() =0;}class BusinessTransaction: public Transaction{ public: virtual void log() { ;//log something here }}BusinessTransaction b_trx;
b_trx 本意希望多态的调用BusinessTransaction的log函数。
然而这却是不可能的,
1 在BusinessTransaction调用构造函数时,先调用基类Transaction的构造函数,
2 这时在Transaction的构造函数中,并不知道其子类实现了log函数,所以会调用基类的log函数
3 也就是说在base class构造期间,virtual函数不是virtual函数
同理对析构函数。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。