vector 分配的内存怎么释放

Delon_sun 2002-03-22 11:40:37
我用 stl 的 vector 作容器
vector<struct node> Forms;

form.push_back(node);
添加
在析构函数中
Forms.erase(Forms.begin(),Forms.end());
这样能不能释放所分配内存?

怎样安全释放。谢谢
...全文
802 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Delon_sun 2002-03-22
  • 打赏
  • 举报
回复
请教墨水兄
能不能说的明白些
inside1 2002-03-22
  • 打赏
  • 举报
回复
无需显式释放,vector会自动释放的,我想会在vector的析构函数中。
hello_wyq 2002-03-22
  • 打赏
  • 举报
回复
我服了你了。
保存复本,厉害!
ciml 2002-03-22
  • 打赏
  • 举报
回复
对,关键是你存放地是指针
ciml 2002-03-22
  • 打赏
  • 举报
回复
对,关键是你存放地是指针
wenliang_d 2002-03-22
  • 打赏
  • 举报
回复
vector 不会自动释放你通过new申请的节点对象,需要手工来做。
aileen_long 2002-03-22
  • 打赏
  • 举报
回复
如果你push_back进Forms里的是指针且指向由new动态分配的空间,则需要手工释放:
vector<struct node>::iterator iter;
iter = Forms.begin();
while (iter != Forms.end())
{
delete *iter;
Forms.erase(iter);
iter = Forms.begin();
}
myan 2002-03-22
  • 打赏
  • 举报
回复
vector与deque不同,其内存占用空间只会增长,不会减小。比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个。所有空间在vector析构时回收。

empty()是用来检测容器是否为空的,clear()可以清空所有元素。但是即使clear(),所占用的内存空间依然如故。

如果你需要空间动态缩小,可以考虑使用deque。如果非要用vector,这里有一个办法:

vector<T> va;
// 填充va,使之有10,000元素
// 使用
// 删除一部分元素

// 创建一个新vector,大小跟va中的有效元素数量相同
{ // 进入一个新的scope
vector<T> vb;
vb.reserve(va.size());

// 将va的内容拷贝到vb中
vb.assign(va.begin(), vb.end());

// 交换va跟vb的内容,这个操作非常迅速
va.swap(vb) // 或者std::swap(va, vb)
} // 离开作用域,vb析构,将那个10,000大小的内存空间释放。

That's all folks.

我也看不穿 2002-03-22
  • 打赏
  • 举报
回复
同意Elminster()
Elminster 2002-03-22
  • 打赏
  • 举报
回复
vector 中的内建有内存管理,当 vector 离开它的生存期的时候,它的析构函数会把 vector 中的元素销毁,并释放它们所占用的空间,所以用 vector 一般不用显式释放 —— 不过,如果你 vector 中存放的是指针,那么当 vector 销毁时,那些指针指向的对象不会被销毁,那些内存不会被释放。
gaoshmail 2002-03-22
  • 打赏
  • 举报
回复
这样是可以的,但是用法很危险;
最好用empty();
如果你用new分配了内存,一定要用delete才能释放

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧