首页  >  文章  >  后端开发  >  为什么 C 析构函数不能用 `std::nested_exception` 抛出异常?

为什么 C 析构函数不能用 `std::nested_exception` 抛出异常?

DDD
DDD原创
2024-11-03 20:40:29856浏览

Why Can't C   Destructors Throw Exceptions with `std::nested_exception`?

为什么 C 不使用 std::nested_exception 来允许从析构函数抛出异常?

不使用 std::nested_exception 的主要原因促进从析构函数抛出异常的原因在于,当另一个异常“正在运行”时,可能存在歧义。如果在析构函数执行期间异常已经处于活动状态,则不清楚如何处理这种情况。用新异常覆盖现有异常是一种潜在的解决方案,但 C 社区内的共识倾向于调用 std::terminate 或自定义 std::terminate_handler。

嵌套异常的探索

尽管考虑了使用嵌套异常的想法,但潜在的实施挑战可能会阻碍其采用。具体来说,对潜在性能影响和异常处理复杂性增加的担忧可能在维持当前方法的决定中发挥了作用。

未来发展

自 C 起17 中,允许使用嵌套异常从析构函数抛出异常的立场保持不变。然而,C 的未来版本可能会重新审视这个概念,并引入替代解决方案来解决对象销毁期间的异常问题。

以上是为什么 C 析构函数不能用 `std::nested_exception` 抛出异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn