【发布时间】:2012-02-24 07:40:01
【问题描述】:
我有以下类结构:
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){}
};
这给了我警告:
在复制构造函数“D”中:
警告:基类“A”应在副本中显式初始化 构造函数
我不明白。
D 的 Copy -Constructor 调用 B 的 copy-ctor 调用 A 的 copy-ctor。
为什么它要我在D中调用A的copy-ctor?
如果我这样做,A的copy-ctor不会被调用两次吗?一次从 B 调用,一次从 D 调用。
非常感谢您对此的任何意见。
【问题讨论】:
-
它永远不会被调用两次。但我也不是很明白。
-
展示你的真实测试用例。类定义以分号结尾,而你的构造函数不是真的
private. -
当我解决这些问题时,sn-p 编译:ideone.com/V3ygZ 所以你的问题在你的无效 C++ 和正确方法之间。在我们看到您实际使用的代码之前,我们不知道在哪里。
-
修复代码后,我没有收到来自 VC10 和 gcc 的任何警告...
标签: c++ inheritance copy-constructor