gpt4 book ai didi

c++ - rethrow_exception 真的可以抛出相同的异常对象,而不是一个拷贝吗?

转载 作者:可可西里 更新时间:2023-11-01 18:29:34 27 4
gpt4 key购买 nike

在检查 exception_ptr 的作用时,C++11 标准指出 (18.8.5/7):

Use of rethrow_exception on exception_ptr objects that refer to the same exception object shall not introduce a data race. [ Note: if rethrow_exception rethrows the same exception object (rather than a copy), concurrent access to that rethrown exception object may introduce a data race...

我没有发现这个奇怪的“注释”适用的情况,因为 rethrow_exception 的描述效果是“抛出:p 引用的异常对象”但是 15.1/3,描述了一般的异常抛出过程要求“抛出异常复制初始化一个临时对象,称为异常对象。”

奇怪的注释暗示 rethrow_exception 会跳过此复制初始化。但这真的可能吗?

最佳答案

当你说 throw x; 时,异常对象的类型与 x 相同,但它是一个拷贝。

当您说 std::rethrow_exception(p); 时,异常对象是指针引用的实际对象,不会进行进一步的复制。

因此,多个线程同时重新抛出相同异常指针(您可以复制!),然后它们都引用了相同对象。 p>

关于c++ - rethrow_exception 真的可以抛出相同的异常对象,而不是一个拷贝吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com