曾经被问到过这样两个问题:
1> 在C/C++中,怎样在程序退出main函数后仍然进行一些操作,比如资源堆栈方面的清理?
2> 在C++程序中,我们要怎样才能够得到程序退出main后对象析构所需要的时间?
我们知道,在C++中,全局对象或者main域中对象的析构,是在退出main函数后进行的。所以对于问题1,我们可以在一个全局对象的析构函数中调用相关的函数来实现。但是,C语言不支持对象,所以这种方法对于C程序就无能为力了。
对于问题2,我们可以通过对象的构造与析构来勉强实现这一功能。我们可以定义两个类A,B,其中A的析构函数可以打印出当前时间,B的构造函数可以打印出当前时间,此外A,B什么也不做。如果我们在所有全局对象的实例定义前定义A的一个实例,而在main函数退出 (return 0 )前定义B的一个实例,那么这两个时间的差就是我们所要的。
然而上述对问题2的解决是基于程序中没有调用exit()函数,若否,对象b就不会被创建,我们也就不能得到想要的时间了。
其实C/C++的CRT中有一个回调函数atexit(...),可以用来注册需要在程序exit的时候需要调用的函数,详细请参考:
http://www.cprogramming.com/fod/atexit.html 或者C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/atonexit.c:123