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. |