views:

484

answers:

3

What is the order in which the destructors and the constructors are called in C++? Using the examples of some Base classes and Derived Classes

+11  A: 

The order is:

Base constructor

Derived constructor

Derived destructor

Base destructor

Example:

class B
{
public:
  B()
  {  
    cout<<"Construct B"<<endl;
  }

  virtual ~B()
  {
    cout<<"Destruct B"<<endl;
  }
};

class D : public B
{
public:
  D()
  {  
    cout<<"Construct D"<<endl;
  }

  virtual ~D()
  {
    cout<<"Destruct D"<<endl;
  }
};



int main(int argc, char **argv)
{
  B b; 
  return 0;
}

Output of example:

Construct B

Construct D

Destruct D

Destruct B

Multiple levels of inheritance works like a stack:

If you consider pushing an item onto the stack as construction, and taking it off as destruction, then you can look at multiple levels of inheritance like a stack.

This works for any number of levels.

Example D2 derives from D derives from B.

Push B on the stack, push D on the stack, push D2 on the stack. So the construction order is B, D, D2. Then to find out destruction order start popping. D2, D, B

More complicated examples:

For more complicated examples, please see the link provided by @JaredPar

Brian R. Bondy
Maybe the OP wants to know about class D: public A, B, C...
Daniel Daranas
+10  A: 

A detailed description of these events, including virtual and multiple inheritance is available at the C++ FAQ Lite. Section 25.14 and 25.15

http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.14

JaredPar
+1  A: 

Also, keep in mind that while array elements are constructed first -> last, they are destructed in the reverse order: last -> first.

Ferruccio
+1 That is true for mostly everything. Order of destruction is always the opposite of construction. Static variables have no guaranteed order of construction, but destruction will happen in reversed order.
David Rodríguez - dribeas