将异常对象引用传递给新的异常对象是否安全?

lur*_*her 4 c++ exception-handling

假设如下:

struct wrapper_exception {
std::runtime_error& err;
  wrapper_exception( std::runtime_error& _e ) : err(e) {}
}; 

try {

throw std::runtime_error("foo");

} catch (std::runtime_error& err) {

 throw wrapper_exception( err);
}
Run Code Online (Sandbox Code Playgroud)

问题:处理后,在wrapper_exception中访问对runtime_error的引用是否安全?

Ker*_* SB 6

我很想说这是未定义的行为.

该标准反复说,当活动处理程序退出而不是通过重新抛出异常(即通过说)时,异常对象的生命周期结束throw;.

由于您不重新抛出异常,原始异常对象在catch块的末尾到期,您最终得到一个悬空引用,与抛出一个包含对局部变量的引用的对象没有什么不同.