Удаление и переназначение указателя из QListк новому объекту с помощью итератора, это правильно? - PullRequest
1 голос
/ 30 октября 2019

У меня есть QList, и я пытаюсь заменить объекты в списке новыми объектами. Контекст заключается в том, что у меня есть список пользовательских объектов (имя класса «Разговор») для представления списка групповых чатов в платформе обмена сообщениями. Я использую std :: find_if, чтобы перебрать список указателей, чтобы найти один с правильным идентификатором, и я хочу взять указатель на этот найденный объект, освободить его (удалить?) И переназначить этот указатель, чтобы он указывал на объект, который ягенерировать с "новым" ключевым словом. Я думаю, что я делаю это правильно, но я не уверен, как проверить.

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

Вот что у меня есть:

GroupChat *gc = new GroupChat(); // extends Conversation
// ...I update the member data here...

auto foundChat = std::find_if(conversations_.Conversations.begin2(),
 conversations_.Conversations.end2(),
 [this, gc](Conversation* o) { // my code to find the correct one...
}

if (foundChat != conversations_.Conversations.end()) {
    auto c = (*foundChat);
    delete c; // Is this right? Not positive...
    //*foundChat = nullptr; // do I need this?
    c = gc;
}

Кажется, что это работает, но я 'Я беспокоюсь о висячих указателях и неправильном освобождении / распределении памяти. Может ли кто-нибудь проверить меня? Спасибо за любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...