4

私は次のコードを持っています:

QPair<QSharedPointer<unsigned int>, int> someclass::somefunction() {
    int siz = data_size();
    QSharedPointer<unsigned int> buffer(new unsigned int[siz]);

    // Fill the buffer...

    return qMakePair(buffer, siz);
}

ある時点で、QSharedPointerこの関数によって返されるものはスコープ外になり、コンストラクターに設定されたポインターは解放されます。valgrind 3.6.1を使用すると、「Mismatched free()/ delete/delete[]」エラーが発生します。私の使用に何か問題がありますか、QSharedPointerそれともこのvalgrind警告に耐えなければなりませんか?

4

1 に答える 1

11

QSharedPointerこれを修正する1つの方法は、カスタムデリッターを作成し、それを次のようなコンストラクターに渡すことです。

template <typename T_>
void do_delete(T_ buf[])
{
    delete[] buf;
}

その後

QSharedPointer<unsigned int> buffer(new unsigned int[siz], do_delete<unsigned int>);

よりエレガントな解決策があるかどうかはわかりません(これはいいでしょう)

于 2011-10-24T12:44:39.397 に答える