Jos*_*vin 11 c++ resources standards exception-handling terminate
C++标准提供了一个std::set_terminate函数,它允许您指定std::terminate实际调用的函数.std::terminate应该只在严峻的情况下被调用,并且确定标准在被调用时所描述的情况是可怕的(例如未被捕获的异常).什么std::terminate时候被调用,这种情况似乎与失去记忆相似 - 你可以理智地做到这一点.
我已经读过它可以用来确保释放资源 - 但是对于大多数资源,这应该在进程退出时由OS自动处理(例如文件句柄).从理论上讲,我可以看到一个案例,如果说,你需要在退出时由于崩溃而向服务器发送特定的消息.但是OS操作的大部分时间应该足够了.
何时使用终止处理程序Right Thing(TM)?
这只是乐观的:
但对于大多数资源,当进程退出时,操作系统应自动处理
关于操作系统自动处理的唯一资源是"文件句柄"和"内存"(这可能因操作系统而异).实际上所有其他资源(如果某人有一个由操作系统自动处理的资源列表,我很乐意)需要由操作系统手动发布.
最好的办法是避免使用terminate()退出并尝试通过强制堆栈正确展开来控制关闭.这将确保正确调用所有析构函数并释放资源(通过析构函数).
关于我唯一要做的就是记录问题.因此,当它确实发生时,我可以返回并修复代码,以便它不会再发生.我喜欢我的代码来很好地解除堆栈的资源释放,但这是一种观点,有些人喜欢在事情变得严重时突然停止.
通常,当异常处理机制找不到抛出异常的处理程序时,会调用它.一些具体的例子是: