Возможно ли иметь виртуальное наследование для класса, не предоставляющего конструктор по умолчанию?Конструктор по умолчанию и виртуальное наследование
Настоящая диаграмма алмаза (простейшая с единственным изменением конструктора по умолчанию) не компилируется (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) {}
};
Спасибо, Francesco
Оставляя D не зная, А это, конечно, желательно. К сожалению, решение «init()» имеет недостаток: конструктор A будет вызываться дважды (один раз по B и C), который может иметь побочные эффекты (особенно если используются статические элементы). Кроме того, если разработчик создает «класс D: public A {}', метод init() может вообще не вызываться, оставив объект в неинициализированном состоянии. – Marste