从构造函数中抛出异常

时间:2011-08-25 22:45:55

标签: c++

出于好奇......

我注意到当我从构造函数中抛出异常时,如果我在调试模式下编译代码并且如果我单击继续调试(或继续单步调试),它将不会退出构造函数,直到它到达结尾。请注意我没有try {} catch {}包装实例化MyClass对象的代码。

我在发布模式下尝试了这个,并且在第一次抛出或最后一次抛出之后无法确定它是否退出构造函数。你知道如果在发布模式下,它会在第一次投掷或最后投掷时离开ctor吗?为什么我在调试时会让我进入下一行呢?不应该只退出它所在的范围?

MyClass::MyClass()
{
   throw "exception1";
   throw "exception2";
   throw "exception3";
}

MyClass a;

1 个答案:

答案 0 :(得分:4)

我怀疑这是一个调试问题。默认情况下,未捕获的异常应该终止该程序。但是,您的调试器会在导致异常的行停止程序。 “继续调试”按钮告诉调试器忽略最后一个致命问题并继续运行。

因此调试器会继续执行,直到达到第二个throw。再次,这将是致命的。所以调试器停在那里。等

如果有一个实际捕获抛出异常的地方,你会看到不同的行为。