是否可以从抽象类构造函数中调用虚方法?

1 c++ oop

类图

目前,我有每个孩子的构造函数中的图中所示的"大量代码".我的目标是将其移动到父的构造函数.

And*_*owl 10

是否可以从抽象类构造函数中调用虚方法?

从技术上讲,它是可能的,但它不会像你期望的那样工作,所以不要这样做,因为派生类的虚拟表还没有构建.

当从构造函数调用虚函数时,将调用正在构造的类的实现,如果您调用的虚函数是纯函数,则会得到未定义的行为.

根据C++ 11标准的第10.4/6段:

可以从抽象类的构造函数(或析构函数)调用成员函数; 对于从这样的构造函数(或析构函数)创建(或销毁)的对象,直接或间接地对纯虚函数进行虚拟调用(10.3)的效​​果是未定义的.