Re: Пятилетний баг убит ?!
От: watchmaker  
Дата: 12.09.20 15:59
Оценка: 6 (1) +6 -1
Здравствуйте, кубик, Вы писали:

К>it — итератор мультимапа. В процессе перебора элементов выясняется что текущее значение it указывает на элемент который надо освободить и убрать из мульмапа.

К>я делаю:

К>delete it->second <- Тут освобождается объект типа А

К>потом делаю it = my_multimap.erase(it);

К>Так можно ?


Если у тебя там сырой указатель, который последним указывает на конкретный экземпляр типа A (то есть, если вся мультимапа имеет какой-то такой тип: std::multi_map<key_type, A*>), то можно и нужно.
Другое дело, что откуда там вообще взялся delete и сырой указатель в 2020-м году?! Использование delete не должно выходить за пределы реализации библиотек по управлению памятью.
То есть почему у тебя изначально не std::multi_map<key_type, std::unique_ptr<A>>, например? Тогда и явный delete не нужен, и за удалением сам unique_ptr проследит и не забудет его сделать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.