繁体   English   中英

QMap和std :: unique_ptr

[英]QMap and std::unique_ptr

我试图防止裸指针,以防止内存泄漏等。我也想将int映射到INuiSensor * 由于我也在使用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*实例的所有引用后,将删除该实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM