QMap and std::unique_ptr

QMap and std::unique_ptr

本文关键字:ptr unique QMap std and      更新时间:2023-10-16

我试图防止裸指针,以防止内存泄漏等。我还想把int映射到inuissensor *。因为我也在使用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);
}

:

last->value = avalue;

产生了这个问题:不能在unique_ptr对象上直接使用=操作符。所以现在我不知道下一步该怎么办。是否有可能以其他方式使用QMap和unique_ptr ?出于某种原因,使用QMap和unique_ptr的整个想法是否很愚蠢?我能做些什么来防止使用裸指针,而仍然使用QMap?

使用Qt容器时,应使用Qt智能指针实现。关于这个线程中不同实现的更多信息。

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

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

当然,这是不会工作的,你已经创建了一个唯一的指针,然后你试图复制它到QMap

使用QSharedPointer。当对INuiSensor*实例的所有引用被删除后,该实例将被删除。