重新抛出指针捕获的异常

时间:2009-05-15 16:27:36

标签: c++ exception

在C ++中,以下示例之间有什么区别?

重新投掷指针

catch (CException* ex)
{
    throw ex;
}

简单的重新投掷

catch (CException* ex)
{
    throw;
}

当捕获重新抛出时,堆栈跟踪会不同吗?

2 个答案:

答案 0 :(得分:7)

是。基本上,你是在第一种情况下自己抛出物体。看起来您自己在throw ex行中生成了异常。在第二种情况下,您只是让原始对象在调用堆栈中上升(从而保留原始调用堆栈),这些是不同的。通常,您应该使用throw;

答案 1 :(得分:-2)

我认为存在性能差异。第二个版本不会制作例外的临时副本。第一个将创建一个副本,因此seond是要走的路。

您可以创建一个简单的异常类并尝试它,在触发它们时将构造函数/复制构造函数打印到控制台。那样你应该看到差异。