有没有办法在终止时运行代码,无论什么样的终止(异常,正常,未捕获的异常等)? 我知道它实际上可以用Java,但它甚至可以在C ++中使用吗?我假设一个Windows环境。
答案 0 :(得分:5)
否 - 如果某人调用TerminateProcess
,您的流程将在没有进一步调整的情况下销毁,并且(特别是)在关闭过程中没有任何机会再运行任何代码。
答案 1 :(得分:2)
对于正常结账申请,我建议
atexit()
答案 2 :(得分:1)
解决问题的一个好方法是使用C ++ RAII习语,这意味着清理操作可以放在对象的析构函数中,即
class ShutdownHook {
~ShutdownHook() {
// exit handler code
}
};
int main() {
ShutdownHook h;
//...
}
请参阅ACE库中的Object Lifetime Manager。在链接文档中,他们也讨论了atexit
函数。
答案 3 :(得分:0)
不适用于任何终止;有些信号是为了不被处理而设计的,比如Linux上的KILL。
这些信号旨在终止耗尽所有内存,CPU或其他资源的程序,并使计算机处于难以运行处理程序功能的状态。