Как компиляторы реализуют виртуальное наследование?
В следующем коде:
class A {
public:
A(int) {}
};
class B : public virtual A {
public:
B() : A(1) {}
};
class C : public B {
public:
C() : A(3), B() {}
};
Создает ли компилятор два экземпляра функции B::ctor
, один без вызова A(1)
и один с ним? Поэтому, когда B::constructor
вызывается из конструктора производного класса, используется первый экземпляр, в противном случае второй.