我已经读到,由于堆栈展开,从析构函数中抛出不是一个好主意。我不确定我是否完全理解。所以我尝试了以下示例
struct foo
{
~foo()
{
throw 1;
}
};
struct bar
{
~bar()
{
throw 2;
}
};
int main()
{
try
{
foo a;
bar b;
throw 3;
}catch(int a)
{
std::cout << a;
}
}
现在我期望a为1,因为首先抛出3,然后调用b的析构函数并抛出2,然后调用a的析构函数并抛出1。从破坏者身上抛出的想法。我的问题是为什么为什么要调用abort()的b的析构函数?
只要在进行异常处理时抛出异常,就会收到无法捕获的特殊异常,这将导致异常中止。
您可以std::uncaught_exception
用来检测异常处理是否已经在进行中,并避免在这种情况下抛出异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句