我已经看到它可以用来确保资源被释放 – 但是对于大多数资源,这个过程将在操作系统退出时自动处理(例如文件句柄).理论上我可以看到一个例子,如果说,你需要发送一个服务器特定的消息,由于崩溃退出.但大多数时候操作系统的处理应该是足够的.
何时使用终止处理程序Right Thing(TM)?
解决方法
but for the majority of resources this should be handled automatically by the OS when the process exits
关于操作系统自动处理的唯一资源是“文件句柄”和“内存”(这可能因操作系统而异).
实际上所有其他资源(如果有人拥有由操作系统I自动处理的资源列表
会喜欢)需要由操作系统手动释放.
你最好的办法是避免使用terminate()退出,并尝试通过强制堆栈正确放松来控制关闭.
这将确保所有析构函数被正确调用,并且资源被释放(通过析构函数).
关于我唯一要做的是记录问题.所以当它确实发生时,我可以回去修复代码,使其不再发生.我喜欢我的代码很好地解决堆栈资源的迁移问题,但这是一个意见,有些人喜欢在事情发生时突然停止.
我的终止时间表被调用:
一般来说,异常处理机制找不到抛出异常的处理程序时被调用.一些具体的例子是:
>异常转义main()
>注意:这是实现定义堆栈是否在这里展开.
因此,我总是抓住主,然后重新抛出(如果我没有明确处理).
这样我保证堆栈(跨所有平台)的解放,并且仍然得到操作系统异常处理机制的好处.
>两个异常同时传播.
>一个异常转义一个解析器,而另一个异常传播.
抛出的表达式产生异常
>主要之前或之后的例外.
>如果异常转义全局对象的构造函数/析构函数.
>如果异常转义函数静态变量的析构函数.
(即注意非本地静态对象的构造函数/析构函数)
>异常转义使用atexit()注册的函数.
>当没有异常正在传播的时候重新抛出.
>未列出的异常转义具有异常说明符列表的方法/函数.
>通过意外.