QMap и 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?

3

Решение

используя контейнер Qt, вы должны использовать реализацию интеллектуальных указателей Qt. Подробнее о различных реализациях в этой теме.

Какие реализации C ++ Smart Pointer доступны?

как уже упоминалось, вы можете пойти с QSharedPointer.

3

Другие решения

Конечно, это не сработает, вы создали уникальный указатель, а затем пытаетесь копия это в QMap,

Использовать QSharedPointer, Когда все ссылки на INuiSensor* экземпляр был удален, экземпляр будет удален.

0

По вопросам рекламы [email protected]