vector 的 clear 到底会不会回收内存

ggqyt 2011-04-22 02:05:38
RT. 我看见有的人说 会有的人说 只是释放元素 不会回收

到底会不会,或者正确的做法应该是?
...全文
650 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-04-22
  • 打赏
  • 举报
回复
单步调试和设断点调试是程序员必须掌握的技能之一。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
pathuang68 2011-04-22
  • 打赏
  • 举报
回复
我觉得这个问题,要分两方面来看:
1. vector容器中的元素
2. vector容器本身。

调用clear以后,vector容器中的元素(对象,而非动态分配得到的对象指针)会全部释放,但vector本身所占用的内存并不会立即释放,直到离开其作用域时,才会释放。
luciferisnotsatan 2011-04-22
  • 打赏
  • 举报
回复

vector<int> vc(100);
printf("%d\n",vc.capacity()); // 100
vc.push_back(1); // 增长了
vc.push_back(2);
printf("%d\n",vc.capacity()); // 150
vc.clear();
printf("%d\n",vc.capacity()); // 150
luciferisnotsatan 2011-04-22
  • 打赏
  • 举报
回复 1
capacity函数 用来获取容器大小


vector<int> vc(100);
vc.push_back(1);
vc.push_back(2);
printf("%d\n",vc.capacity());
vc.clear();
printf("%d\n",vc.capacity());
pathuang68 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pathuang68 的回复:]

如果vector存放的是对象,而不是动态产生的对象指针,那么:
Clear:
All the elements of the vector are dropped: their destructors are called, and then they are removed from the vector container, leaving the container with a si……
[/Quote]

vector本身占用的内存,当然不会被释放,但是碰到第一个}时,就会自动释放了。
twiker 2011-04-22
  • 打赏
  • 举报
回复
这个嘛恐怕有点说不清。STL里面的内存管理很复杂的,有的内存分配器在删除元素的时候不会删除内存,以免你下一次再向里面push元素的时候再次申请内存,这样速度会很快的。侯捷在讲boost技术与应用里面讲到boost的内存管理的时候也讲了STL中的内存管理方式。你可以去看看
pathuang68 2011-04-22
  • 打赏
  • 举报
回复
如果vector存放的是对象,而不是动态产生的对象指针,那么:
Clear:
All the elements of the vector are dropped: their destructors are called, and then they are removed from the vector container, leaving the container with a size of 0.

可见是会释放内存的。
luciferisnotsatan 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ggqyt 的回复:]

我没说指针,我说的是vector占用的内存会释放不》?
[/Quote]
不会
ggqyt 2011-04-22
  • 打赏
  • 举报
回复
我没说指针,我说的是vector占用的内存会释放不》?
xmu_才盛 2011-04-22
  • 打赏
  • 举报
回复
不会, 如果 你里面寸的是指针,
得先释放指针,


然后再 clear

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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