У меня есть стандартный вектор указателей.C++ std vector - аннулированный итератор вопрос
При каких обстоятельствах итератор в этот вектор становится недействительным?
У меня есть причина полагать, что при удалении объекта любой векторный итератор, ссылающийся на него, таким образом аннулируется. Однако это не кажется мне правильным. Я верю, что это будет стандартное поведение контейнеров в Managed .NET, но это кажется мне в C++.
for (It = Vec.begin(); It != Vec.end(); It++){
GoToOtherCode((*It));
}
function GoToOtherCode (ObjectType* Obj){
delete Obj;
}
Должно ли это аннулировать Итератор? Мне не кажется, что этого не должно быть, но тогда я застрял с трудной проблемой для отладки! (Я боюсь своего обходного пути - для итерации через вектор с помощью integer-index. (Это отлично работает ... Я просто боюсь, почему вышеупомянутое вызывает проблемы с недействительностью).
Заранее спасибо для вашего времени.
Редактировать: Спасибо за совет. Общий консенсус в том, что приведенный выше код опасен, но это не приведет к аннулированию Iterator. Я считаю, что я столкнулся с ошибкой с отладчиком Visual Studio 2008, потому что после открытия проект на следующий день, эта недействительная проблема исчезла.Так что, как и во многих вещах на компьютерах, если ничего больше не работает, попробуйте сбросить эту вещь.
вы получаете такую «повод поверить»? Если это из книги, скажите нам, какой из них мы не рекомендуем никому другому. Если это было из ваших собственных экспериментов, тогда ваш метод был ошибочным и заслуживает более пристального взгляда. Трудно сказать, что произойдет в управляемом коде, поскольку он не имеет эквивалента 'delete'. –
Пожалуйста, верните/отмените это, чтобы выяснить, интересуетесь ли вы стандартным C++ или расширенным языком Microsoft, реализованным в VS_. Нет такой вещи, как «C++ 8». – Novelocrat