是否有某种方法可以在终止时运行代码,无论哪种终止(异常、正常、未捕获的异常等)?我知道它在 Java 中实际上是可能的,但在 C++ 中甚至可能吗?我假设一个windows环境。
问问题
4856 次
4 回答
5
不 - 如果有人调用TerminateProcess
,您的进程将被销毁,无需进一步告别,并且(特别是)在关闭过程中没有任何机会运行更多代码。
于 2011-08-07T18:40:00.770 回答
3
对于正常的收盘申请,我建议
atexit()
于 2011-08-07T18:33:26.360 回答
1
解决该问题的一种好方法是使用 C++ RAII 习语,这意味着清理操作可以放在对象的析构函数中,即
class ShutdownHook {
~ShutdownHook() {
// exit handler code
}
};
int main() {
ShutdownHook h;
//...
}
请参阅ACE 库中的对象生命周期管理器。在链接的文档中,他们也讨论了该atexit
功能。
于 2011-08-07T18:40:51.147 回答
0
不用于任何形式的终止;有些信号设计为不被处理,例如 Linux 上的 KILL。
这些信号旨在终止已消耗所有内存或 CPU 或其他一些资源的程序,并使计算机处于难以运行处理程序函数的状态。
于 2011-08-08T11:00:16.073 回答