为什么以下代码会输出
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
返回什么,但我想知道为什么这样做是可以的?或者说它是未定义的,还是取决于编译器?
erase
调用迭代器目标的析构函数,但不会将迭代器目标所在的内存位置置空。请注意,如果列表包含指针,则delete
指针并不等同于delete
指针所指向的对象!销毁指针实际上是一个无操作。 - Vlad