什么时候是C终止处理程序Right Thing(TM)?
C标准提供了std :: set_terminate函数,它可以指定什么函数std :: terminate应该实际调用. std :: terminate只能在可怕的情况下被调用,并且当标准描述的时候,它被称为是可怕的(例如一个未捕获的异常).当std :: terminate确实被调用时,这种情况似乎是不符合内存的 – 你没有太多的理由可以做到这一点.
我已经看到它可以用来确保资源被释放 – 但是对于大多数资源,这个过程将在操作系统退出时自动处理(例如文件句柄).理论上我可以看到一个例子,如果说,你需要发送一个服务器特定的消息,由于崩溃退出.但大多数时候操作系统的处理应该是足够的. 何时使用终止处理程序Right Thing(TM)? 更新:People interested in what can be done with custom terminate handlers might find this non-portable trick useful. 解决方法
这只是乐观的:
关于操作系统自动处理的唯一资源是“文件句柄”和“内存”(这可能因操作系统而异). 你最好的办法是避免使用terminate()退出,并尝试通过强制堆栈正确放松来控制关闭. 关于我唯一要做的是记录问题.所以当它确实发生时,我可以回去修复代码,使其不再发生.我喜欢我的代码很好地解决堆栈资源的迁移问题,但这是一个意见,有些人喜欢在事情发生时突然停止. 我的终止时间表被调用: 一般来说,异常处理机制找不到抛出异常的处理程序时被调用.一些具体的例子是: >异常转义main() >注意:这是实现定义堆栈是否在这里展开. >两个异常同时传播. >一个异常转义一个解析器,而另一个异常传播. >主要之前或之后的例外. >如果异常转义全局对象的构造函数/析构函数. >当没有异常正在传播的时候重新抛出. >通过意外. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |