假设我们得到了一个菱形继承,其中 D 从 B1 和 B2 继承,其基数为 V,如下所示:
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 被调用了一次。为什么?
D* d = new D(1);
提前致谢。