STL中Vector的内存释放问题

Vector是STL中最常见的模板之一,其内存是连续的。

Vector的大小有size和capacity之别,内存可以动态增长。

Vector调用clear()之后,只会把size设置为0,而内存空间并没有释放。 vector 中的内建有内存管理,当 vector 离开它的生存期的时候,它的析构函数会把 vector 中的元素销毁,并释放它们所占用的空间,所以用 vector 一般不用显式释放 —— 不过,如果你 vector 中存放的是指针,那么当 vector 销毁时,那些指针指向的对象不会被销毁,那些内存不会被释放。

在《effective STL》和其实很多C++文章中都有指明,用clear()无法保证内存回收。但是swap技法可以。具体方法如下所示: 

vector<int> nums;
nums.push_back(1);
nums.push_back(1);
nums.push_back(2);
nums.push_back(2);
vector<int>().swap(nums); //或者nums.swap(vector<int> ()); 

或者如下所示 加一对大括号都可以,意思一样的:

{
    std::vector<int> tmp = nums; 
    nums.swap(tmp);
} 

加一对大括号是可以让tmp退出{}的时候自动析构。
swap技法就是通过交换函数swap(),使得vector离开其自身的作用域,从而强制释放 vector所占的内存空间。


参考网址:

http://hi.baidu.com/hezengquan/blog/item/0c51a251ee3934828d5430c4.html

http://blog.csdn.net/shenshenjin/article/details/6003425

http://www.cnblogs.com/Frandy/archive/2011/05/11/Vector_Clear_Memory.html


阅读更多
文章标签: vector c
个人分类: 面试题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭