コンパイラは仮想継承をどのように実装しますか?
次のコードでは:
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
関数の2つのインスタンスを生成しますか?1つは呼び出しなし、もう1つはA(1)
呼び出しありですか?したがって、B::constructor
が派生クラスのコンストラクターから呼び出されると、最初のインスタンスが使用されます。それ以外の場合は、2番目のインスタンスが使用されます。