C++ 中构造函数可否是虚函数?
绝不要!!
而且,在构造函数中调用虚函数也是不提倡的行为,因为会引发预想不到的结果。
因为,在 derived class 对象构造的过程中,首先调用的是基类的构造函数,等基类构造结束,才开始构造派生类的部分。
这个过程中,编译器将该对象视为 基类,而非派生类(因为,派生类对象的专属部分还未初始化!!!)
所以,如果在构造函数中调用虚函数,虚函数调用的一定是基类的虚函数,对象的行为就如同是基类的对象一样。
或者可以这么说:这个时候,虚函数不再是 虚函数。。。
参考:Effective C++ 条款9: 绝不要在构造和析构过程中调用 virtual funcion
探讨了C++中构造函数不能被声明为虚函数的原因,并解释了在构造函数中调用虚函数可能带来的问题。当构造派生类对象时,若在此过程中调用了虚函数,则行为将如同基类对象一般。

被折叠的 条评论
为什么被折叠?



