dcsimg
Login | Register   
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: Beginner
Jun 15, 1999

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


The Order of Destructors' Call

An object's destructor invokes the destructors of its direct base classes and member objects. The invocation occurs in the reverse order of the construction of the subobjects. Note, however, that all destructors are called with their qualified name, ignoring any possible virtual overriding destructors in derived classes. For example:

 
  struct A  {
    virtual ~A() { cout << "destroying A" << endl; }
  };

  struct B: public A  {
    ~B() { cout << "destroying B" << endl;} 
  };

  int main()
  {
    B b;
  };

This program displays:

 
  destroying B
  destroying A 

This is because the compiler inserts additional code into the user-defined destructor of class B. The augmented destructor looks like this:

 
  B::~B()   {
      //user-written code
    cout<<"destroying B"<<endl; 
      //pseudo C++ code inserted by the compiler comes after the user-written code:
    this->A::~A();   // (1) destructor called with its qualified name
  }

In other words, although the destructor of class A is virtual, the qualified call inserted into the destructor of B is resolved statically (a function call with a qualified name bypasses the virtual mechanism). Therefore, A's destructor is called rather than B's when the statement marked (1) is executed.

Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.
Thanks for your registration, follow us on our social networks to keep up-to-date