类对象初始化顺序


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()
posted @ 2009-11-09 02:54  史莱姆  阅读(261)  评论(0编辑  收藏  举报