«уничтожение» объекта означает, что его память освобождается, а его содержимое может быть изменено (в основном, если это делает написанный от руки деструктор и, возможно, в результате сохранения на месте вещей, связанных со свободной памятью). list::erase возвращает вам новый итератор, который вы должны использовать вместо того, который был передан в качестве аргумента (у меня возникнет соблазн сделать i = l.erase(i);
привычкой).
Разрушение никоим образом не означает, что память выметается, стирается. Ранее допустимое местоположение по-прежнему допустимо в большинстве случаев с точки зрения ЦП (т. е. он может извлекать значения), но на него нельзя полагаться, поскольку другая операция может повторно использовать это местоположение для любой цели в любое время. время.
Вы вряд ли увидите, что *i
вызывает segfault, имхо, хотя это может произойти с более сложными типами, использующими указатели, но вы можете увидеть, что он имеет новые значения.
Другие коллекции могут иметь более предсказуемое поведение, чем list. IIrc, вектор будет сжимать область хранения, поэтому предыдущее значение будет видно только при дальнейшем разыменовании i
в редких случаях.
person
PypeBros
schedule
11.03.2011