QMap 和 std::unique_ptr

Che*_*ron 5 c++ qt unique-ptr qmap

我试图防止裸指针,防止内存泄漏等。我也想映射intINuiSensor*。由于我也在使用 Qt,因此我尝试使用它QMap<int, std::unique_ptr<INuiSensor>>来执行此操作,但是 QMap 的源代码使这变得不可能:

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);
}
Run Code Online (Sandbox Code Playgroud)

线路:

last->value = avalue;
Run Code Online (Sandbox Code Playgroud)

是造成问题的原因:您不能直接在 unique_ptr 上使用 = 运算符。所以现在我对接下来要做什么感到困惑。是否可以以其他方式使用 QMap 和 unique_ptr ?出于某种原因,使用 QMap 和 unique_ptr 的整个想法是愚蠢的吗?我可以做些什么来防止在仍然使用 QMap 的同时使用裸指针?

kir*_*off 2

使用Qt容器,你应该使用Qt智能指针实现。有关此线程中不同实现的更多信息。

有哪些 C++ 智能指针实现可用?

如前所述,您可以使用 QSharedPointer。