处理异常时引发异常

昆汀

我正在阅读“ C ++编程语言第4版”,并且对有关异常处理的段落有疑问:

在某些情况下,必须放弃异常处理,以减少不太细微的错误处理技术。指导原则是:

  • 处理异常时不要抛出异常。
  • 不要抛出无法捕获的异常。

如果异常处理实现使您无法执行任何操作,则它将终止您的程序。

有人可以给我第一个情景的例子吗?我只想到这样的事情,但这是根据g ++的有效代码:

try
{
    throw 1;
}
catch(...)
{
    try
    {
        throw 2;
    }
    catch(...)
    {
        cout << "OK";
    }
}
迈克·西摩

这有点误导;只要有另一个处理程序可以捕获它,就可以从异常处理程序中抛出异常(这是我在“处理异常时所理解的”内容)。

问题是如果您从堆栈展开期间被销毁的对象的析构函数中抛出异常。在这种情况下,有两个未处理的异常,而通常的异常机制只能处理一个。因此,响应是致电terminate

例子:

struct dodgy {~dodgy() {throw "Don't do this!";}};

try {
    dodgy d;
    throw 1;
} catch (...) {
    // Never reached: destroying `d` killed the program.
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章