What is the difference between exit(0) and return statement in the main function of a C++ program?
When exit(0) is used to exit from a C++ program, the destructor for local non-static objects is not called.
class MyClass { public: // Constructor MyClass() { cout<< "Constructor" << endl; } // Destructor MyClass() { cout<< "Destructor" << endl; } }; int main() { MyClass obj; // Using exit exit(0); }
Output:
Constructor
If we do a return from the main, then implementation will make sure that the destructor is called
class MyClass { public: // Constructor MyClass() { cout<< "Constructor" << endl; } // Destructor MyClass() { cout<< "Destructor" << endl; } }; int main() { MyClass obj; // Using return return 0; }
Output:
Constructor
Destructor
For static and global variables the destructor may get called (depending on the compiler implementation).
class MyClass { public: // Constructor MyClass() { cout<< "Constructor" << endl; } // Destructor MyClass() { cout<< "Destructor" << endl; } }; int main() { static MyClass obj; // Using exit exit(0); }
Output:
Implementation Dependent
This is because static & global variables are load time variables and are allocated memory in the data area (which is independent of function call) and not in the Activation Record of a function.
Load time variables are cleaned up by the start-up library.
2 Comments
.
.jhjblkn