社区
C语言
帖子详情
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
打赏
收藏
vector 分配的内存怎么释放
我用 stl 的 vector 作容器 vector Forms; 用 form.push_back(node); 添加 在析构函数中 Forms.erase(Forms.begin(),Forms.end()); 这样能不能释放所分配内存? 怎样安全释放。谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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才能释放
C++
vector
内存
分配
及正确
释放
谈到
vector
的
内存
分配
,首先要知道size()和capacity()方法的区别。前者求的是实际的
vector
元素个数,后者求的是实际占用
内存
的个数,一般来说,申请的
内存
capacity()是大于或等于size()的 1.清空
vector
的元素:clear() 2.
释放
内存
:clear() +shrink_to_fit() 或 swap() 1.clear() 1.使用clear()不会真正
释放
内存
,capacity()无变化 #include <iostream> #i.
C++ STL :
Vector
内存
分配
与
释放
vector
可以容纳许多类型的数据,如若干个整数,所以称其为容器。
vector
是C++ STL的一个重要成员,使用它时需要包含头文件:#include<
vector
>。 关于
vector
的使用,虽然可以动态的
分配
内存
,但是稍不注意,就会落入
内存
陷阱中,无形中增大了程序的
内存
开销,导致程序崩溃。基于此,有必要梳理一下C++ STL中的
vector
的
内存
分配
与
释放
机制。 文章从“定义”、“添加”、“清空”三个部分来探究
vector
的
内存
分配
和
释放
机制。 导读: 1.
vector
内存
vector
的
内存
释放
1.
vector
内存
分配
机制 C++中
vector
的一个特点是:
内存
空间只会增长,不会减小。即为了支持快速的随机访问,
vector
容器的元素以连续方式存放,每一个元素都挨着前一个元素存储。设想,如果每次
vector
添加一个新元素时,为了满足连续存放这个特性,都需要重新
分配
空间、拷贝元素、撤销旧空间,这样性能就会非常慢。 所以,实际上
分配
时其容量要比当前所需容量更多,即
vector
预留了一些额外的存储区,这样就不必单独为每个新元素重新
分配
内存
空间,减少开销。 另外,在
vector
中
内存
只增不减体现在 -
Vector
()
内存
释放
的问题
注意事项:
vector
从前存储了大量数据,比如10000000,经过各种处理后,现在只有100条,那么向清空原来数据所占有的空间,就可以通过这种交换技术swap技法就是通过交换函数swap(),使得
vector
离开其自身的作用域,从而强制
释放
vector
所占的
内存
空间。所有空间在
vector
析构时回收;在一个应用中,可能会需要向一个
vector
中插入很多记录,比如说1000条,为了避免在插入过程中移动
内存
,实现向系统预订一段足够的连续的空间。方法三:加一对大括号是可以让tmp退出{}时,自动析构;
C++
vector
中的
内存
分配
与
释放
C++
vector
中的
内存
分配
与
释放
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章