我正在阅读“ 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] 删除。
我来说两句