2013-05-07 63 views
4

我目前正在建立在砂基础上的代码库。是否有任何静态分析工具检查规则3(或5规则的C + + 11)

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

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

目前我们使用Coverity和GCC版本4.4。

+4

或[Rule of Zero](http://flamingdangerzone.com/cxx11/2012/08/15/rule-of-zero.html)。 – 2013-05-07 15:58:53

+0

你能更具体吗?也许一个例子可以帮助... – perror 2013-05-07 16:01:30

+0

@Andrey Cpp - 发送示例 – mark 2013-05-07 16:36:57

回答

0

Coverity has。我们使用6.5版本。有一个检查器MISSING_COPY_OR_ASSIGN。

+0

此规则默认情况下未启用Coverity(可能被认为是误报)。我们现在启用了它并突出了一些问题。 – mark 2013-05-24 07:36:35

+0

@mark请检查--rule选项。它启用所有这些:ASSIGN_NOT_RETURNING_STAR_THIS,COPY_WITHOUT_ASSIGN,MISSING_COPY_OR_ASSIGN,SELF_ASSIGN。 Coverity有一个不错的docs @ server:8080/docs/en/index.html。端口可以​​不同,直到配置。 – jackua 2013-05-24 17:03:54

+0

@mark默认设置非常保守。我在150个跳棋中跑出了130个,每天晚上我都会在单个构建中找到所有部门的资源。非常平行的构建只需要4个小时。我将所有缺陷分为4个级别,分别对待它们。我可以分享我的分类。 – jackua 2013-05-24 17:57:33

0

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

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