1

类图

目前,我在每个孩子的构造函数中都有图中所示的“大量代码”。我的目标是将其移至父级的构造函数。

4

2 回答 2

10

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

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

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

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

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

于 2013-05-05T10:08:06.707 回答
1

如果您尝试从FileContainer构造函数调用initializeFiles() ,它将调用FileContainer::initializeFiles()。这是因为派生类的构造函数尚未执行,因此派生类的 v-table 尚未构建。

此外,如果FileContainer::initializeFiles()是纯虚拟函数,那么您将崩溃。

于 2013-05-05T10:11:09.813 回答