可以在成员初始化列表中调用虚函数吗?

Bow*_* Fu 3 c++

有效的c ++项目9

函数createLogString可以是虚拟的吗?

class BuyTransaction: public Transaction {  
?public:  
??BuyTransaction( parameters ):Transaction(createLogString(parameters)) { ... }
??...   
?private:  
??static std::string createLogString( parameters );  
}; 
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

是的,它可以是虚拟的(而不是静态的).但是,它仍将在构造期间静态绑定,并且不会动态分派.

使其成为虚拟的唯一要点是它是否也在类的其他成员中使用(不是构造函数/析构函数),并且派生类可能会覆盖它以对这些成员执行有用的操作.然而,这开始具有设计气味的微弱痕迹.

斯科特的建议"永远不要在构造或破坏期间调用虚函数"源于这样一个事实,即它很少能完成任何有用的事情.

  • 我更喜欢这个答案,而不是链接为重复的答案,这个答案过于冗长和过于严格.在构造函数中,所有成员函数调用都等同于限定调用. (4认同)