5

メモリリークなどを防ぐために、裸のポインターを防止しようとしています。また、 INuiSensor*intにマップしたいと考えています。私もQtを使用しているので、これを行うために使用しようとしましたが、QMapのソースコードではこれが不可能です:QMap<int, std::unique_ptr<INuiSensor>>

template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::insert(const Key &akey, const T &avalue)
{
    detach();
    Node *n = d->root();
    Node *y = d->end();
    Node *last = 0;
    bool  left = true;
    while (n) {
        y = n;
        if (!qMapLessThanKey(n->key, akey)) {
            last = n;
            left = true;
            n = n->leftNode();
        } else {
            left = false;
            n = n->rightNode();
        }
    }
    if (last && !qMapLessThanKey(akey, last->key)) {
        last->value = avalue;
        return iterator(last);
    }
    Node *z = d->createNode(akey, avalue, y, left);
    return iterator(z);
}

この線:

last->value = avalue;

問題を引き起こすのは次のとおりです。unique_ptr で =operator を直接使用することはできません。だから今、私は次に何をすべきか困惑しています。他の方法で QMap と unique_ptr を使用することは可能ですか? QMap と unique_ptr を使用するという全体的なアイデアは、何らかの理由でばかげていますか? QMap を使用しているときにネイキッド ポインターを使用しないようにするにはどうすればよいですか?

4

2 に答える 2

2

Qt コンテナーを使用する場合は、Qt スマート ポインターの実装を使用する必要があります。このスレッドのさまざまな実装について詳しく説明します。

どのような C++ スマート ポインターの実装が利用可能ですか?

前述のように、QSharedPointer を使用できます。

于 2013-04-28T13:56:42.423 に答える
-1

もちろん、これは機能しません。一意のポインターを作成してから、それを にコピーしよQMapうとします。

を使用しQSharedPointerます。インスタンスへのすべての参照INuiSensor*が削除されると、インスタンスが削除されます。

于 2013-04-28T13:05:15.890 に答える