メモリリークなどを防ぐために、裸のポインターを防止しようとしています。また、 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 を使用しているときにネイキッド ポインターを使用しないようにするにはどうすればよいですか?