When and how to catch exceptions

Bit*_*ter 2 c++ exception-handling

我正在与一群开发人员建立代码库,这些开发人员主要不是计算机科学或软件工程(主要是计算机工程)

我正在寻找一篇关于何时应该捕获异常以及何时应该尝试从中恢复的好文章.我刚才发现一篇文章,我认为解释得很好,但谷歌并没有帮我找到它.

我们正在用C++开发.文章的链接是一种可接受的答案形式,以及带有指针的摘要.我正在这里教书,所以教程格式会很好.正如非软件工程师可以访问的那样.谢谢.

Sam*_*ler 5

Herb Sutter有一篇很好的文章可能对你有用.它没有回答您的具体问题(何时/如何捕获),但确实提供了处理特殊情况的一般概述和指南.

我在这里逐字复制了他的摘要

区分错误和非错误.当且仅当它违反了函数满足其被调用者的先决条件,建立自己的后置条件或重新建立其保持共同责任的不变量的能力时,失败才是错误.其他一切都不是错误.

确保错误始终使您的程序处于有效状态; 这是基本保证.注意不变的破坏性错误(包括但不限于泄漏),这些错误只是普通的错误.

另外要保证最终状态是原始状态(如果有错误,操作被回滚)或预期目标状态(如果没有错误,则提交操作); 这是有力的保证.

更愿意保证操作永不失败.虽然这对于大多数函数来说是不可能的,但是对于诸如析构函数和释放函数之类的函数是必需的.

最后,更喜欢使用异常而不是错误代码来报告错误.仅当不能使用异常时(当您不控制所有可能的调用代码并且不能保证它将使用相同的编译器和兼容的编译选项进行编译时)以及不是错误的条件时,才使用错误代码.