我知道规则是不要在析构函数中抛出一个,我理解为什么.我不敢这样做.但即使是C++ Faq Lite也说99%的这个规则很好.他们未能深入研究的另外1%是什么?
从〜()链接到C++ Faq Lite子弹点:
只是不要这样做.如果恒星和行星以这样的方式排列,你发现你需要......
还是不要这样做.
哇,我正要投票给胡安,直到我看到关于从不使用例外的部分.
好的,首先,胡安说得对.如果,不管出于什么原因,你在两个例外追逐彼此的堆栈的这种情况结束了,C++就干脆扔了它的手和它的最后一餐,并异常终止.因此,从dtor抛出异常可以保证您有可能导致意外异常终止的代码路径,这通常是一件坏事.如果这就是你想要的,那就直截了当,打电话给中止或退出,然后把它搞定.
然而,关于通过不使用异常来避免它的部分是不好的建议.对于系统而言,异常实际上是C++中必不可少的机制,这些系统将是健壮的并且可以运行很长时间.它们确实是保证您可以在不泄漏资源的情况下处理错误情况的唯一方法.
碰巧我曾经为马歇尔克莱恩工作,他写了这篇常见问题解答,并从常见问题解答书中教授C++; 因此,我可以告诉你,你错误地解释了答案.他不是说"哎呀,有一个案子可以,但是我不会对你这么做,"他说"我敢肯定,如果我绝对地说,毫无例外地不要有一天,有人会提出一个有意义的离墙例子.但我不知道一个并且不相信它.不要在家里试试,并咨询律师,没有明示或暗示的保证."