私は自分のコードを強化するために (とりわけ) Coverity (5.5.1) を使用しています。問題に出くわし、今では Coverity のセットアップが完了していないのではないかと疑っています。この例を見てください:
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
関数では、警告は表示されますが、警告は表示されA a2(5)
ませんA *a1 = new A(5)
。
new
スタック上にオブジェクトが作成されたときとは異なるコンストラクターへの呼び出しをカバーしているように思えます。
Coverity の構成で見落としているものはありますか? ヒープに割り当てられたときに警告を表示するにはどうすればよいですか?