Alo*_*ave 7 c++ exception-handling exception
在他富有洞察力的论文"
错误和异常处理"中,
@ Dave Abrahams说:
如果可能的话,让你的异常类免受双重破坏.不幸的是,一些流行的编译器偶尔会导致异常对象被销毁两次.如果你可以安排它是无害的(例如通过清零已删除的指针),你的代码将更加健壮.
我无法理解这个特定的指导方针,有人可以:
就像@Tony所说,这个指南意味着防止编译器错误.该指南的历史可以追溯到2001年左右,当时异常支持可能仍然有点不稳定.从那时起,我认为/希望大多数编译器已修复此错误,因此指南可能不再具有相关性.
FWIW,该指南已从CERT编码实践中删除.在这个页面的讨论中,提出了一个有趣的观点:无论如何,破坏对象两次是UB,所以无论你在你的类中处理什么都不会让你的程序完全可预测.
但是,如果您真的希望您的代码可以跨编译器(包括旧版本)移植,那么您应该考虑所有这些小故障.例如,Boost经历了很多工作来解决编译器错误; 他们可以简单地编写符合标准的代码并将失败的责任推迟到实现,但这会妨碍他们的库的采用.
在编写代码时是否需要同样谨慎取决于您的要求,并且基本上归结为这个问题:是否支持数十个编译器确实值得做多少工作?