为什么以下显示2

list<int> l;
l.push_back( 1 );
l.push_back( 2 );
l.push_back( 3 );
list<int>::iterator i = l.begin();
i++;
l.erase( i );
cout << *i;

我知道erase返回什么,但是我想知道为什么可以吗?还是未定义,还是取决于编译器?

最佳答案

是的,这是不确定的行为。您正在取消引用一种野指针。不应在i之后使用erase的值。

是的,该对象指向的erase destructs。但是,对于POD类型,销毁没有任何作用。
erase不会为要擦除的迭代器分配任何特殊的“空”值,而该迭代器不再有效。

关于c++ - 不会删除std::list::iterator使迭代器无效并销毁对象吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5274025/

10-12 18:34