【发布时间】:2013-02-18 11:10:43
【问题描述】:
我正在使用 coverity (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 初始化之前,我使用_b 来初始化_a。在this 问题中,我了解到编译器或任何其他工具发出这样的警告“很高兴”。
与我最初对我现在发现的问题的理解相反,coverity 实际上会发出一个完美匹配的缺陷 (UNINT),但仅在堆栈上分配时,而不是在使用 @987654326 创建时@。所以在我的main-function 中,我收到了A a2(5) 的警告,但没有收到A *a1 = new A(5) 的警告。
在我看来,在使用new 时,与在堆栈上创建对象时相比,覆盖性处理对构造函数的调用有所不同。
在我的覆盖率配置中有什么我忽略的吗?在堆上分配时,我该怎么做才能发出警告?
【问题讨论】:
标签: c++ static-analysis coverity