c++ new一个vector<Object*>,然后new N个Object,添加到vector中,求怎么释放内存!

Matrix4X4 发布于 2012/04/12 17:03
阅读 4K+
收藏 2
如题!
加载中
0
cloud
cloud

循环vector 一个一个释放 delete Object*

然后再clear或swap,最后delete vector

newzai
newzai
回复 @cloud : 啥叫做用不好会出现问题??什么东西用不好都会出现问题。。就算new、delete、malloc、free用不好照样出现问题。。最讨厌看到别人说这个用不好怎么样,怎么样。如果是这样,干脆别干IT了。。
cloud
cloud
回复 @smartdot : 没必要用,为什么要用?中间夹一层很不爽。智能指针用不好就会出问题。毕竟整个项目不是我一个人干。
Matrix4X4
Matrix4X4
@cloud 智能指针会带来不安全?怎么说?
cloud
cloud
回复 @smartdot : 因为服务器端都知道什么时候初始化,什么时候会去释放,没必要用智能指针,用了反而有一种不安全感........-_-!
Matrix4X4
Matrix4X4
@cloud 为什么不能用在服务端呢?
下一页
0
backo880607
backo880607
为什么不在vector中存放智能指针呢
0
chao_83
chao_83
为什么不直接用vector<Object>呢?
0
感冒九十九
感冒九十九

不知道下面这段程序对你有用吗?

template<class Iterator>

void my_delete(Iterator& Beg,Iterator &End)
{
Iterator it=Beg;
while( it != End )
{
delete *it;
*it=NULL;
it++;
}
}
0
t
tianyizhuhan

在外面new vector的时候函数已经帮你开辟好要使用的内存了,

无需再把vector分配内存。

0
芦苇荡
芦苇荡

其实考虑delete的顺序就可以了。记得要先delete object ,在new vector 就行。

vector至少拷贝object指针地址,和new的object内存无关。

0
newzai
newzai

vector erase一个元素时,自己释放自己由于管理对象的相关的内容。如果被管理的对象本身也是一块栈地址,需要自己手动释放。

当然你可以使用auto_ptr、shared_ptr等智能指针包含Object 对象,这样erase的时候,智能指针帮你自动释放Object对象的栈空间。   

0
IT写轮眼
IT写轮眼
template<typename T>
void STLClear(T* v) {
  for (typename T::iterator it = v->begin(); it != v->end(); ++it) {
    delete *it;
  }
  v->clear();
}

template<typename T>
void STLMapClear(T* v) {
  for (typename T::iterator it = v->begin(); it != v->end(); ++it) {
    delete it->second;
  }
  v->clear();
}
0
指南针1992

释放的时候也很简单啊    !直接使用一个循环进行释放啊!毕竟vector的元素就是指针啊,直接delete  vector[i];不过说实话,我觉得你可以使用share_ptr或者auto_ptr来存储new更好啊!减少自己的代码,而且不用担心没有释放的问题,这是让对象自己释放内存,就如同普通变量一样使用了,但是这里有个问题就是share_ptr还是auto_ptr的复制问题,有一个不能使用,因为vector必须支持复制操作,而这两个中有一个使用的是智能指针,另外一个则是撤销前面的对象所指对象,这个我也用的很少,你自己找找看看他们的区别吧!

int  *Old = new  int(10);

int   *New  =  Old;

delete  Old;  //或者delete  New;

只要你明白这两中delete方式都是正确的,那么vector<int *>的释放就明白了

返回顶部
顶部