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的引用是否安全?
我很想说这是未定义的行为.
该标准反复说,当活动处理程序退出而不是通过重新抛出异常(即通过说)时,异常对象的生命周期结束throw;.
由于您不重新抛出异常,原始异常对象在catch块的末尾到期,您最终得到一个悬空引用,与抛出一个包含对局部变量的引用的对象没有什么不同.