c – MS Stl库是否包含内存泄漏?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – MS Stl库是否包含内存泄漏?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1173字,纯文字阅读大概需要2分钟。
内容图文
![c – MS Stl库是否包含内存泄漏?](/upload/InfoBanner/zyjiaocheng/960/101fa7349d764f7aafdd1b99a190654f.jpg)
我遇到了一个说明MS c stl容器在clear()API中有内存泄漏的说明(不记得在哪里).
因此,如果您有:
void main()
{
std::vector<int> vVec;
for(int i =0; i < 100; i++)
vVec.push_back(i);
vVec.clear();
}
因此,在向量堆上分配的内存并未真正释放…
该笔记说(据我所记)以下技术确保内存真正发布……
void main()
{
std::vector<int> vVec;
for(int i =0; i < 100; i++)
vVec.push_back(i);
vVec.clear();
vector<int>(vVec).swap(vVec);
}
你有这方面的经验吗?以上是真的吗?如果是的话,这里到底发生了什么?
(还有最后一个问题,抱歉,这对所有其他stl容器都是如此吗?)
谢谢,
解决方法:
这不是内存泄漏;这是所要求的行为(按标准).
std :: vector<> :: clear()不允许降低容量,因此
无法释放其缓冲区.当内存将被释放
析构函数被调用,在交换中,缓冲区将被交换,所以
vector<int>().swap(vVec);
,临时对象给vVec它的(空)缓冲区,并接收
vVec的非空缓冲区,它在完整的末尾删除
表达.
清除后通常不需要,甚至不需要;如果你想
一个全新的向量,只需声明一个.另一方面,如果你已经
逐渐填充矢量,它可以很容易地具有更多的容量
比需要的,以及一个过大的缓冲区.在这种情况下:
vector<int>(vVec).swap(vVec);
然后将首先使用精确大小的缓冲区制作(临时)副本
使用vVec交换缓冲区.结果将是vVec有一个
容量等于它的大小,而不是更多. (形式上,这不是
由标准保证在任何地方,但在实践中,它对应于
我所知道的所有实现.)
内容总结
以上是互联网集市为您收集整理的c – MS Stl库是否包含内存泄漏?全部内容,希望文章能够帮你解决c – MS Stl库是否包含内存泄漏?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。