按值捕获异常时的C ++示例很糟糕

时间:2017-10-30 14:48:21

标签: c++ exception try-catch object-slicing

我知道在按值捕获异常时,会调用复制构造函数,但是按值或不通过引用捕获时有什么不好吗?如果按值捕获,可以给出一个特定的例子吗? (我的意思是除了复制构造函数执行所需的时间,但由于异常很少发生,因此并不重要)。 我听说切片问题有一些问题,但是当这可能导致损坏/问题时我无法想出。

1 个答案:

答案 0 :(得分:3)

除了(1)对象切片的可能性(非常危险)和(2)获取值副本的开销之外,您将失去以某种方式修改异常的能力: / p>

catch (Foo ex){
    ex.embellishWithMoreDetails(/*whatever*/);
    throw; // rethrows the caught, not the copied exception by reference.
}

并且可以使你的程序变得笨拙。