警告:基类“A”应该在复制构造函数中显式初始化

vei*_*eio 5 c++ inheritance copy-constructor

我有以下类结构:

class A{
   A(){}
   A(const A& src){}
};

class B : virtual A {
   B():A(){}
   B(const B& src):A(src){}
};

class C : virtual A {
   C():A(){}
   C(const C& src):A(src){}
};
class D : virtual B, virtual C {
   D():B(),C(){}
   D(const D& src):B(src),C(src){}
};
Run Code Online (Sandbox Code Playgroud)

这给了我警告:

在复制构造函数“D”中:

警告:基类“A”应该在复制构造函数中显式初始化

我不理解。D 的复制构造函数调用copy-ctorB 的 B 调用copy-ctorA 的。 为什么它要我调用copy-ctorD 中的 A?

如果我这样做,copy-ctorA 的不会被调用两次吗?一次从 B 调用,一次从 D 调用。

对此的任何投入都非常感谢。

vei*_*eio 0

原因就是虚拟继承。因此 A 应该显式初始化。