有关STL的问题(内存删除的先后顺序)
如下代码是在vector容器中装入指针元素:
vector<object*> vec;//object是已经定义好的一个类
object *p;
for (int i=0;i<5;i++)
{
p = new object;
.....//给每个元素加上一些东西,例如标号等
vec.push_back(p);
}
如果我先使用erase()方法,删掉某些元素的数据,更极端一些,我直接使用clear(),那么,如果我想把我当初分配的内存删除该怎么做?还要采用一些迭代器的方法么?目前我有一个思路是,另外构建一个空的容器(数据也是指向对象的指针,不妨称为vec2),让该容器的每个指针和上面初始化的容器中的指针指向相同,我能不能把vec2放在一边,然后vec是erase()也好,clear()也好,最终我只要利用vec2把内存删除就行了?
[解决办法]
我记得容器的操作只是针对容器元素本身,如果元素是指针,那么clear()只是把指针都删了,而不会对每个指针指向的东西调用析构函数,如果是这样的话,那么只有一个指针容器存在的话,调用clear()必然会造成内存泄露。
如果在此之前复制了一个副本,那么原本删了就删了,不影响副本的使用,所以VEC1清空以后,再对VEC2的每个指针元素调用delete,就完成了new-delete配对,不会造成内存泄露。
楼主的想法应该是对的。
本人也是菜鸟,说错了勿怪。
[解决办法]
楼主还是找本《effecitve stl》紧急啃啃吧。
[解决办法]
你把所有指针变量全部给clear了,那么我想知道,你怎么才能获得你使用new得到的内存的指针??
[解决办法]
vector<object*> vec;//object是已经定义好的一个类object *vec2[5]; object *p; for (int i=0;i<5;i++) { p = new object; vec2[i]=p; .....//给每个元素加上一些东西,例如标号等 vec.push_back(p); }//...for (int i=0;i<5;i++) delete vec2[i];//将new和delete象fopen,fclose那样用。
[解决办法]
你的代码里面容器里面保存的是一个指针,当你erase或者clear之前没有释放相应的内存那么做完这个操作之后,
你已经找不到这个指针了,所以这个指针所指向的内存无法释放。这种做法本来就是错误的。如果你再用另一个容
器,仅仅为了做内存释放,那就是明明错了,你确去掩饰这个错误,而非解决这个错误。这样不可取!