5

是否有某种方法可以在终止时运行代码,无论哪种终止(异常、正常、未捕获的异常等)?我知道它在 Java 中实际上是可能的,但在 C++ 中甚至可能吗?我假设一个windows环境。

4

4 回答 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 回答