请教个关于STL的问题。

pillarhuang 2011-07-27 03:15:52
假如现在已经建立的一个map<long,vector<CString> > mapVector,里面已经存在元素了。

1.现在想清空的话直接用mapVector.clear()会不会出现内存泄漏。

2.还是要自己手动把second清空了,再清空map。
map<long,vector<CString> >::iterator iter;
for(iter = mapVector.begin(); iter != mapVector.end(); iter++)
{
iter->second.clear();
}
mapVector.clear();
...全文
80 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
独酌逸醉 2011-07-27
  • 打赏
  • 举报
回复
看源码。
pillarhuang 2011-07-27
  • 打赏
  • 举报
回复
map里面已经存在元素了。我想问第一种方法会不会泄漏,如果会的话,我就用第二种。
科比布莱恩特 2011-07-27
  • 打赏
  • 举报
回复
看错了,你是单个清。

单个清就更不会了。因为你是clear,没有元素代表初始化数组。clear是安全使用的一个方法。
ryfdizuo 2011-07-27
  • 打赏
  • 举报
回复
1.现在想清空的话直接用mapVector.clear()会不会出现内存泄漏。
======
不会内存泄露,vector<CString> vector的析构函数会调用vector::clear();

2.还是要自己手动把second清空了,再清空map。
这样更好。
xxcc309 2011-07-27
  • 打赏
  • 举报
回复
不会泄露的,你可以看一下vector的实现方式。
映维网 2011-07-27
  • 打赏
  • 举报
回复
你看一下vector<T>的实现就明白了,内部存储的实体其实就是一个数组,在释放的时候析构函数会自动销毁数组的
科比布莱恩特 2011-07-27
  • 打赏
  • 举报
回复
1.不会。

2.你在循环里一次全清了,没必要用循环,循环是单个清。
  • 打赏
  • 举报
回复
要自己手动把second清空了,再清空map
CString使用不当会引起内存泄露
Michael_Xie 2011-07-27
  • 打赏
  • 举报
回复
即使不clear也不会有内存泄漏
blowlow 2011-07-27
  • 打赏
  • 举报
回复
不会内存泄露吧。

64,662

社区成员

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

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