码迷,mamicode.com
首页 > 编程语言 > 详细

effective c++ 条款9 do not call virtual function in constructor or deconstructor

时间:2014-07-05 20:43:00      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   cti   io   

在构造函数中不要调用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函数

 

同理对析构函数。

effective c++ 条款9 do not call virtual function in constructor or deconstructor,布布扣,bubuko.com

effective c++ 条款9 do not call virtual function in constructor or deconstructor

标签:style   blog   color   strong   cti   io   

原文地址:http://www.cnblogs.com/williamwood/p/3825319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!