map迭代器删除元素有关问题
map迭代器删除元素问题
看书上说迭代器的earse接口会调用析构函数,是不是在map中第二个元素如果是指针的话释放的时候就不需要自己再delete了?
typedef struct
{
int a;
}test;
map<int, test*> mm;
int main()
{
test* t0 = new test;
test* t1 = new test;
mm[0] = t0;
mm[1] = t1;
map<int, test*>::iterator it = mm.begin();
for(;it != mm.end();)
{
if(it->first == 0)
{
//delete it->second; 需要删除这个指针吗?
mm.earse(it++);
}
else
{
it++;
}
}
}
------解决方案--------------------
如果是你自己new的,就需要你自己delete,无论指针在不在容器里。
------解决方案--------------------
容器里面存储的是指针本身,因此erase只会删除指针,而不会删除指针指向的对象。
要删除指针指向的对象,必须使用delete。
看书上说迭代器的earse接口会调用析构函数,是不是在map中第二个元素如果是指针的话释放的时候就不需要自己再delete了?
typedef struct
{
int a;
}test;
map<int, test*> mm;
int main()
{
test* t0 = new test;
test* t1 = new test;
mm[0] = t0;
mm[1] = t1;
map<int, test*>::iterator it = mm.begin();
for(;it != mm.end();)
{
if(it->first == 0)
{
//delete it->second; 需要删除这个指针吗?
mm.earse(it++);
}
else
{
it++;
}
}
}
------解决方案--------------------
如果是你自己new的,就需要你自己delete,无论指针在不在容器里。
------解决方案--------------------
容器里面存储的是指针本身,因此erase只会删除指针,而不会删除指针指向的对象。
要删除指针指向的对象,必须使用delete。