具有额外 class 复制构造函数的钻石继承

Diamond inheritance with additional class copy constructor

所以我最近想知道,如果我们有一个基 class AB 实际继承,那么 class 的复制构造函数会是什么样子,并且C,其中 BCD 继承,DE 继承。

所以我有点困惑。 D 的复制构造函数是否应该在其初始化列表中仍然具有基础 class 的 (A) 构造函数,或者现在是 E 的工作? E 可以非虚拟地继承 D 我是对的吗?

是的,A应该还在初始化列表中,E实际上不需要继承D。构建顺序应该是:

A() --> B() --> C() --> D()

隐式生成的复制构造函数工作正常,但如果您想自己显式编写它,它可能看起来像:

D(D const &o): A(o), B(o), C(o) {}

E(E const &o): A(o), D(o) {}

出于初始化目的,虚拟基 类 的行为就好像它们是最派生对象的直接基一样。子对象中的任何初始化程序都将被忽略(例如,在我的 E 代码中,初始化 D(o) 实际上不会初始化 A,尽管 A 列在 D的拷贝构造函数).

无论E虚拟是否继承D,这都是一样的。