【问题标题】:The last point of potential destruction for the exception object异常对象的最后一个潜在破坏点
【发布时间】:2019-07-24 13:47:41
【问题描述】:

英语不是我的母语。所以有时阅读 C++ 标准我无法理解所写的内容。 这是一个这样的误解。

在C++ 20 Standard(14.1 Throwing an exception)中有这样写

  1. ...异常对象的潜在破坏点是:

(4.1) — 当异常的活动处理程序以任何方式退出时 除了重新抛出,在对象销毁后立即 (如果有的话)在处理程序的异常声明中声明;

(4.2) — 当 std::exception_ptr (17.9.6) 类型的对象引用 到异常对象被销毁,在析构函数之前 std::exception_ptr 返回。

然后

在异常对象的所有潜在破坏点中, 有一个未指定的最后一个异常对象被销毁。所有其他点都发生在最后一点之前。

什么是“最后的毁灭点”?它在标准中的含义是什么?

似乎已经列出了异常对象的所有潜在破坏点。

【问题讨论】:

  • All other points happen before that last one. - 哈哈,别开玩笑了...
  • 可能。这只是我觉得有趣的措辞。
  • @500-InternalServerError 是的,这也让我发笑。顶级法律术语:)
  • @VladfromMoscow 异常对象是单个对象。所以它只能有一个潜在破坏点。它只能有一个实际破坏点,你确实想说。 什么是“未指定的最后一点” «异常对象被销毁的地方»。

标签: c++ exception language-lawyer destructuring


【解决方案1】:

这只是一种可笑的密集说法:

允许异常对象在以下位置死亡:[...]。

这些点中的一个将是最后一个(duh),此时异常实际上会消失。

实现可以随意对这些点进行排序,只要它可以确定最后一个在正确的时间杀死异常。

换句话说,它做了正确的事™。

【讨论】:

    【解决方案2】:

    可能有多个std::exception_ptr 对象引用在多个线程中使用和销毁的相同异常。标准规定未指定哪个 std::exception_ptr 析构函数调用会破坏异常,但保证所有其他析构函数调用都发生在之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多