Order of member constructor and destructor calls

In other words, are members guaranteed to be initialized by order of declaration and destroyed in reverse order?

Yes to both. See 12.6.2

6 Initialization shall proceed in the
following order:

  • First, and only for
    the constructor of the most derived
    class as described below, virtual base
    classes shall be initialized in the
    order they appear on a depth-first
    left-to-right traversal of the
    directed acyclic graph of base
    classes, where “left-to-right” is the
    order of appearance of the base class
    names in the derived class
    base-specifier-list.

  • Then, direct
    base classes shall be initialized in
    declaration order as they appear in
    the base-specifier-list (regardless of
    the order of the mem-initializers).

  • Then, non-static data members shall be
    initialized in the order they were
    declared in the class definition
    (again regardless of the order of the
    mem-initializers).

  • Finally, the
    compound-statement of the constructor
    body is executed. [ Note: the
    declaration order is mandated to
    ensure that base and member subobjects
    are destroyed in the reverse order of
    initialization. —end note ]

Leave a Comment