Registrations are now open. Join us today!
There is still a lot of work to do on the wiki yet! More information about editing can be found here.
Already have an account?

Microsoft KB Archive/92500

From BetaArchive Wiki
Knowledge Base


Article ID: 92500

Article Last Modified on 7/5/2005



APPLIES TO

  • Microsoft Visual C++ 1.0 Professional Edition
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.52 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++ 6.0 Standard Edition



This article was previously published under Q92500

SYMPTOMS

When an application calls the exit(), _exit(), _cexit(), or _c_exit() functions, the destructors for any temporary or automatic objects that exist at the time of the call are not called. The text below provides a sample program to demonstrate this behavior.

MORE INFORMATION

An automatic object is an object that is defined in a function where the object is not declared to be "static." A temporary object is an object created by the compiler.

To destruct an automatic object before calling exit(), explicitly call the destructor for the object, as follows:

   myObject.myClass::~myClass();
                

Sample Code

/* Compile options needed:  for 16-bit - /f /Od /Zi
*                           for 32-bit - none
*/ 

#include <iostream.h>
#include <process.h>

class myClass
{
   int nVal;

public:
   myClass();
   void View() {cout << nVal << "\n";};
   ~myClass();
};

myClass::myClass()
{
   nVal = 99;
}

myClass::~myClass()
{
   cout << "Destructor has been called\n";
}

void main(void)
{
   myClass myObject;

   myObject.View();

// Remove the comment from the next line to call the destructor
// myObject.myClass::~myClass();

   exit(0);
}
                


Additional query words: 8.00 8.00c 9.00 9.10

Keywords: kblangcpp kbprb KB92500