PRB: exit() Function Does Not Clean Up Nonstatic ObjectsLast reviewed: September 30, 1997Article ID: Q92500 |
The information in this article applies to:
SUMMARYWhen 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 INFORMATIONAn 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
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |