英语不是我的母语。因此,有时阅读C++标准,我无法理解什么是写的。这里有一个这样的误会。
在C++ 20标准(14.1抛出异常)中,会写入
(4.1) -在异常声明中声明的对象(如果有的话)被销毁后,以除重新抛出以外的任何方式退出异常的活动处理程序-在处理程序中声明;
(4.2) -当引用异常对象的std::exception_ptr类型的对象(17.9.6)在std::exception_ptr的析构函数返回之前被销毁。
然后
在异常对象的所有潜在破坏点中,有一个未指定的最后一个点,其中异常对象被销毁。所有其他的问题都发生在最后一次之前。
“毁灭的最后一点”是什么?它在标准中有什么意义?
似乎已经列出了例外对象的所有潜在破坏点。
发布于 2019-07-24 13:59:31
这只是一种滑稽而密集的表达方式:
允许异常对象在以下几点死亡:. 其中一个点将是最后一个点(duh),在这一点上,异常将实际死亡。 实现可以随意排序这些点,只要它能够确定哪一个是最后一个在正确的时间杀死异常。
换句话说,它做了正确的事情,™。
发布于 2019-07-24 14:38:28
可能有多个std::exception_ptr对象引用在多个线程中使用和销毁的相同异常。标准中没有指定是哪个std::exception_ptr析构函数调用破坏了异常,但保证所有其他析构函数调用都发生在此之前。
https://stackoverflow.com/questions/57184495
复制相似问题