我正在使用覆盖率(5.5.1)(以及其他)来强化我的代码。我偶然发现了一个问题,现在我怀疑我的覆盖设置不完整。看看这个例子:
class A
{
int _a,_b;
public:
A(int b) : _a(_b), _b(b)
{ }
};
int main(void)
{
A *a1 = new A(5);
delete a1;
A a2(5);
return 0;
}
_b
可以看出,我在_a
使用b
. 在这个问题中,我了解到编译器或任何其他工具发出这样的警告会“很高兴”。
与我对现在发现的问题的最初理解相反,coverity 实际上会发出一个完美匹配的缺陷(UNINT),但仅在堆栈上分配时,而不是在使用new
. 所以在我的main
-function 中,我得到了警告,A a2(5)
但没有得到A *a1 = new A(5)
.
在我看来,覆盖率在使用new
时处理对构造函数的调用与在堆栈上创建对象时不同。
我的覆盖率配置中有什么我忽略的吗?在堆上分配时,我该怎么做才能发出警告?