我正在尝试防止裸指针,防止内存泄漏等。我还想将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时,我该怎么做才能防止使用裸指针?
答案 0 :(得分:3)
使用Qt容器,您应该使用Qt智能指针实现。有关此线程中不同实现的更多信息。
如上所述,你可以使用QSharedPointer。答案 1 :(得分:0)
当然这不起作用,你创建了一个独特的指针,然后你尝试将复制到QMap
。
使用QSharedPointer
。删除对INuiSensor*
实例的所有引用后,将删除该实例。