2

私は自分のコードを強化するために (とりわけ) 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して初期化しています。この質問で、コンパイラやその他のツールによって発行されるこのような警告が「あればいい」ことを学びました。_ab

私が今見つけた問題の最初の理解とは反対に、coverity は実際には完全に一致する欠陥 ( UNINT ) を発行しますが、それはスタックに割り当てられた場合のみであり、 で作成された場合ではありませんnew。したがって、main関数では、警告は表示されますが、警告は表示されA a2(5)ませんA *a1 = new A(5)

newスタック上にオブジェクトが作成されたときとは異なるコンストラクターへの呼び出しをカバーしているように思えます。

Coverity の構成で見落としているものはありますか? ヒープに割り当てられたときに警告を表示するにはどうすればよいですか?

4

1 に答える 1

0

サポートによると、これは Coverity の既知のバグであることが判明しました (現在のバージョンでも)。次の夏にリリースされたバージョンで修正が行われる可能性があります。

このバグは、ID: 50128 UNINIT FN: member used in constructor before initializationの下にリストされており、修正およびリリースされたときにリリース ノートに記載されます。

于 2013-03-04T10:59:00.343 に答える