类对象初始化顺序
1)所有虚基类子对象会按照深度优先,从左到右的顺序进行初始化
2)直接基类子对象按照他们在类定义中的声明的顺序被构造起来
3)非静态成员子对象按照他们在类定义体中声明的顺序被构造起来
4)构造函数体被执行
class B1{};
class V1: public B1{};
class D1: virtual public V1{};
class B2{};
class B3{};
class V2: public B1, public B2{};
class D1: virtual public V2,public B3{};
class M1{};
class M2{};
class X: public D1, public D2{
M1 m1_;
M2 m2_;
};
首先构造虚基类子对象
V1: B1::B1() V1::V1()
V2: B1::B1() B2::B2() V2::V2()
其次构造非虚基类子对象
D1: D1::D1()
D2: B3::B3() D2::D2()
再次,构造所有成员
M1::M1() M2::M2()
最后构造X本身
X::X()