1) All the virtual base class sub-objects will be initialized in the depth-first order from left to right.
2) directly base class sub-objects are constructed in the order they are declared in the class definition.
3) non-static member sub-objects are constructed in the order they are declared in the class definition body.
4) The constructor is executed.
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 _;
M 2 m2 _;
};
First, construct the virtual base class sub-Object
V1: B1: B1 () V1: V1 ()
V2: B1: B1 () B2: B2 () V2: V2 ()
Second, construct non-virtual base-class sub-objects
D1: D1: D1 ()
D2: B3: B3 () D2: D2 ()
Again, construct all members
M1: M1 () m2: M2 ()
Final Construction of X itself
X: X ()