次のように、ベースが V である B1 と B2 の両方から D が継承するダイヤモンド継承を取得したとします。
struct V {
V(){cout << "V()" << endl;}
V(int){cout << "V(int)" << endl;}
};
struct B1 : virtual V {
B1(){cout << "B1()" << endl;}
B1(int i): V(i) {cout << "B1(int)" << endl;
/*…*/ }
};
struct B2 : virtual V {
B2(){cout << "B2()" << endl;}
B2(int i) { cout << "B2()" << endl; }
};
struct D : B1, B2 {
D(int i): V(i) { cout << "D(int)" << endl; }
};
D* パラメータを初期化するとき、B1 および B2 のデフォルト コンストラクタが V コンストラクタを呼び出すことを期待しています。しかし、次の行を実行すると、V が 1 回呼び出されました。なんで?
D* d = new D(1);
前もって感謝します。