The constructors in a class hierarchy execute in the following sequence: base class constructors are called first, then member object's constructors, and finally, the constructor of the derived class executes. If a class has multiple base classes, the base classes' constructors execute right to left, according to their position in the base class list. For example:
struct C: public A, public B
When c is instantiated, the constructors are called in the following sequence: A(), B(), F(), C(). Constructors of virtual base classes execute before any other non-virtual base class constructors. Consider:
struct M: public A, public B, virtual public V
In this example, the constructors are called in the following sequence: V(), A(), B(), M(). Destructors are always executed in the reverse order of constructor calls. Therefore, when M is destroyed, the destructors execute in the following order: ~M(), ~B(),~A(),~V().