I've really been experimenting with C++ over the last week or two, and I just wondered if you could call a class's destructor just before a program was killed. I tried it with this (which I suspected wouldn't work - and sure enough, it didn't):
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include <iostream>
usingnamespace std;
class TerminationTest {
public:
TerminationTest() {cout << "Termination test started. Please press CTRL+C to terminate this program." << endl;}
~TerminationTest() {cout << "Terminated safely." << endl;}
} test;
int main()
{
while (true);
return 0;
}
dtors are called automatically when the object dies. This happens when it is deleted (if it was allocated with new), or when it loses scope (if it was declared locally), or when the program closes (if it was global).
In the above example... the dtor will be called when the program closes because test is global. however this is bad practice because you're using cout in the dtor which is also global -- and it's possible cout has been deleted before your class has. So you should refrain from making objects like this global.
Another reason you not getting the dtor message is because you're deadlocking in an infinite loop while(true);. Which means the program never closes, which means the dtor is never called.
Some other things you can try:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
class TerminationTest
{
//...
}; // do not make the global "test" object
void SomeFunc()
{
TerminationTest a; // a's ctor called here
} // a's dtor called here
int main()
{
TerminationTest* b = new TerminationTest; // b's ctor called here
SomeFunc();
delete b; // b's dtor called here
return 0;
}