bugprone-exception-escape¶
查找可能直接或间接抛出异常,但实际上不应该抛出异常的函数。不应该抛出异常的函数包括以下几种:
析构函数
移动构造函数
移动赋值运算符
main()
函数swap()
函数iter_swap()
函数iter_move()
函数用
throw()
或noexcept
标记的函数作为选项提供的其他函数
析构函数抛出异常可能会导致未定义的行为、资源泄漏或程序意外终止。抛出移动构造函数或移动赋值运算符也可能导致未定义的行为或资源泄漏。 swap()
操作在大多数情况下预计是无抛出的,并且它们总是可以以无抛出的方式实现。无抛出的 swap()
操作也用于创建移动操作。抛出异常的 main()
函数也会导致意外终止。
明确声明为 noexcept(false)
或 throw(exception)
的函数将被排除在分析之外,尽管不建议用于 swap()
、main()
、移动构造函数、移动赋值运算符和析构函数等函数,但这明确表明了开发人员的意图,应该予以尊重。
警告! 此检查在大型源文件上可能很昂贵。
选项¶
- FunctionsThatShouldNotThrow¶
包含不应该抛出异常的函数名的逗号分隔列表。此参数的一个示例值可以是
WinMain
,它将 Windows API 中的WinMain()
函数添加到不应该抛出异常的函数列表中。默认值为一个空字符串。
- IgnoredExceptions¶
包含在检查中不被视为抛出异常的类型名称的逗号分隔列表。默认值为一个空字符串。