是否有任何理由按价值捕获异常?

时间:2013-07-18 02:45:48

标签: c++ exception-handling

Sutter和Alexandrescu的编码标准tell us通过引用来捕捉异常。

当然,像这样的一揽子推荐通常会偶尔有例外(没有双关语意)。是否有任何用例需要按值来捕获异常?

1 个答案:

答案 0 :(得分:5)

捕获引用的优点是,除了明显不需要可复制性或执行复制(可能是切片)的原因之外,您可以修改它并继续使用throw;进行处理。

如果要修改对象,但在未修改的对象上继续使用throw;进行异常处理,则必须进行复制,其中一种方法是捕获按价值。

但是,我认为这是非常做作的。按const引用后跟一个明确的副本可以更好地表达意图。

另请注意,抛出新的C ++ 11 nested_exception将在新异常中嵌套先前抛出的异常对象,而不是值接收的对象。在这种情况下,你可以想象自己保留对收到的异常的引用,除非你通过引用收到它,否则它将变得陈旧。