处理异常时抛出异常

时间:2013-07-24 15:44:30

标签: c++ exception-handling try-catch

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

  

有些情况下必须放弃异常处理   微妙的错误处理技术。指导原则是:

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

如果异常处理实现捕获了你,那么它   将终止您的计划。

有人可以举个例子说明第一次看台吗?我只想到这样的东西,但根据g ++,这是一个有效的代码:

try
{
    throw 1;
}
catch(...)
{
    try
    {
        throw 2;
    }
    catch(...)
    {
        cout << "OK";
    }
}

1 个答案:

答案 0 :(得分:14)

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

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

示例:

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

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