누출 포인터를 막으려 고 메모리 유출을 막으려 고합니다. int
을 INuiSensor*으로 매핑하려고합니다. 나는 또한 Qt를 사용하고 있기 때문에 나는이 일을 QMap<int, std::unique_ptr<INuiSensor>>
를 사용하려고했으나 QMap의 소스 코드를 만드는이 불가능 :QMap 및 std :: unique_ptr
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 포인터는 솔직히 말해서 똥입니다. 특히'std :: unique_ptr'을 이미 사용하고 있다면 std :: map을 사용하십시오. 또는 _Misuse_'QSharedPointer'. – Lol4t0
@ Lol4t0 강력한 진술입니다. 뒷받침 할만한 증거가 있습니까? – cmannett85
@ cmannett85,이 중 하나 인 QScopedPointer는 이동 의미를 지원하지 않습니다. Qt 컨테이너는 반복자를 수정으로 간주하므로 (qvector.begin()은 스레드로부터 안전하지 않습니다), 순서가 지정되지 않은 집합, 해시 함수 구현은 까다 롭습니다. 하나를 직접 지정하십시오. – Lol4t0