C++虚继承区别

c++ virtual inheritance difference

给定两个 class 具有共同虚拟基础的 class:

class Base {};

class Derived1 : public virtual Base {};

class Derived2 : public virtual Base {};

这两个进一步派生出来的classes有什么区别吗?:

第一个也直接派生自虚拟基 class,但我认为这没有任何效果,因为它与 Derived1Derived2 共享。

他们说同样的话。唯一的区别是,如果您从 Derived3 的两个定义中删除 public Derived1public Derived2,第一个仍将继承自 Base,而第二个则不会。

编辑:我没有仔细考虑是否存在一些奇怪的交叉投射情况,两者也会有不同的行为,尽管我认为没有。

这些例子之间没有区别。

但在更复杂的情况下,直接继承否则继承的虚拟基础可能会改变基础 class 子对象的构造/销毁顺序。

我认为对象布局没有任何区别,因为虚拟继承的目的是避免 Base 的两个副本(或案例 1 中的三个副本)。

所以所有的区别都在于您的意图和代码的真正可读性。