为什么以下显示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/