可能有類的虛擬繼承不提供默認構造函數?默認的構造函數和虛擬繼承
目前的菱形圖(最簡單的一個,沒有提供默認的構造函數)沒有編譯(g ++ 4.4.3)。
class A {
public:
A(int) {}
};
class B : virtual public A {
public:
B(int i) : A(i) {}
};
class C : virtual public A {
public:
C(int i) : A(i) {}
};
class D : public B, public C {
public:
D(int i) : B(i), C(i) {}
};
感謝, 弗朗切斯科
離開d不知道A的,當然,理想的。在「的init()」的解決方案,不幸的是,有一個缺點:A的構造將被調用兩次(一次由每個B和C)可具有副作用(特別是如果使用靜態成員)。另外,如果開發人員創建'class D:public A {}',則可能根本不會調用'init()'方法,使對象保持未初始化狀態。 – Marste 2015-08-12 13:05:59