0

QVariant の std::array を含むクラスがあります。

    class MyClass()
    {
        typedef std::array<QVariant, 42> attribs_t;
        attribs_t                        m_Attribs;

    public:
        MyClass()
        {
            m_Attribs[0] = 41;
        }
    };

Intel Parallel インスペクタを使用してこのプロジェクトを分析したところ、 「初期化されて
いないメモリ アクセス」が検出されました。m_Attribs[0] = 41;

std::array の要素のコンストラクターを手動で呼び出す必要がありますか、それとも誤検知ですか?

4

2 に答える 2

3

配列のサイズはstd::arrayコンパイル時に固定され、デフォルト コンストラクター (MyClassコンストラクターが呼び出す) はすべてQVariantの配列をデフォルト構成またはコピー構成します。つまり、コンストラクターの開始時にQVariant、配列に 42 個のオブジェクトがあり、それらはすべて無効である (つまり、isValid()false を返す) と予想します。

代入は以下と同じ効果を持つべきです

m_Attribs[0] = QVariant( 41 );

これは私には問題ないようです。

要するに、インテルの評判が良くなければ、誤検出だと主張する傾向があります。:-}

于 2013-07-19T10:14:28.880 に答える