在C ++中,以下示例之间有什么区别?
重新投掷指针:
catch (CException* ex)
{
throw ex;
}
简单的重新投掷:
catch (CException* ex)
{
throw;
}
当捕获重新抛出时,堆栈跟踪会不同吗?
答案 0 :(得分:7)
是。基本上,你是在第一种情况下自己抛出物体。看起来您自己在throw ex
行中生成了异常。在第二种情况下,您只是让原始对象在调用堆栈中上升(从而保留原始调用堆栈),这些是不同的。通常,您应该使用throw;
。
答案 1 :(得分:-2)
我认为存在性能差异。第二个版本不会制作例外的临时副本。第一个将创建一个副本,因此seond是要走的路。
您可以创建一个简单的异常类并尝试它,在触发它们时将构造函数/复制构造函数打印到控制台。那样你应该看到差异。