首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有关STL的有关问题(内存删除的先后顺序)

2012-08-16 
有关STL的问题(内存删除的先后顺序)如下代码是在vector容器中装入指针元素:vectorobject* vec//object

有关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得到的内存的指针??
[解决办法]

探讨

引用:

你把所有指针变量全部给clear了,那么我想知道,你怎么才能获得你使用new得到的内存的指针??
是不是不能这么干?

[解决办法]
C/C++ code
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之前没有释放相应的内存那么做完这个操作之后,

你已经找不到这个指针了,所以这个指针所指向的内存无法释放。这种做法本来就是错误的。如果你再用另一个容

器,仅仅为了做内存释放,那就是明明错了,你确去掩饰这个错误,而非解决这个错误。这样不可取!

热点排行