是否有任何静态分析工具可以检查规则 3(或规则 5 C++11)[已关闭]

Are there any static analysis tools that check for Rule of 3 (or Rule of 5 C++11) [closed]

提问人:mark 提问时间:5/7/2013 更新时间:5/24/2013 访问量:756

问:


我们不允许向读者、工具、软件库等寻求推荐的问题。您可以编辑问题,以便用事实和引文来回答。

去年关闭。

我目前正在开发一个建立在沙子基础上的代码库。

在所谓的测试库中,有许多类违反了“3 法则”。大多数声明了一个非平凡的析构函数,但缺少复制构造函数或赋值运算符。

是否有任何编译器标志 (gcc) 或静态分析工具在类违反 3 规则时发出警告?

目前,我们在 GCC 版本 4.4 中使用 Coverity。

C++ 静态分析 三法则

评论

0赞 perror 5/8/2013
你能更具体一点吗?也许举个例子会有所帮助......
0赞 mark 5/8/2013
@Andrey Cpp - 示例已发送

答:

0赞 CodeCurmudgeon 5/9/2013 #1

来自Parasoft(商业工具)的C++测试有一个规则(MRM-40),涵盖了“一致地复制和销毁”,看起来对您有所帮助。基本上,它说如果你定义了任何一个复制构造函数、复制赋值运算符或析构函数,你可能需要定义一个或两个其他的。

更多信息请见 http://www.parasoft.com/jsp/products/cpptest.jsp

0赞 jackua 5/24/2013 #2

Coverity有。我们使用 6.5 版本。有一个跳棋MISSING_COPY_OR_ASSIGN。

评论

0赞 mark 5/24/2013
默认情况下,Coverity 未启用此规则(可能被视为误报)。我们现在已经启用了它,并强调了一些问题。
0赞 jackua 5/25/2013
@mark 请勾选 --rule 选项。它支持所有这些:ASSIGN_NOT_RETURNING_STAR_THIS、COPY_WITHOUT_ASSIGN、MISSING_COPY_OR_ASSIGN SELF_ASSIGN。Coverity 有一个很好的文档 @ server:8080/docs/en/index.html。端口可以不同,取决于配置。
0赞 jackua 5/25/2013
@mark 默认设置非常保守。我每天晚上都能找到 130 个检查器中的 130 个,所有部门资源都集中在一个版本中。通过非常并行的构建,只需 4 小时。我将所有缺陷分为 4 个级别,以便分别处理它们。我可以分享我的分类。