[C++杂记] STL中vector中clear的使用

在STL中,使用vector的clear虽然可以清空元素,但是并不会释放内存(这是出于性能的考虑,应该是将不需要的空间打一个标签,表示不在使用,但并不释放)。如果在循环中连续使用,或者容器中的元素过大,会造成内存严重泄露。正确的处理方法如下:

vector<type> v;
//.... 这里添加许多元素给v
//.... 这里删除v中的许多元素
vector<type>(v).swap(v);
//此时v的容量已经尽可能的符合其当前包含的元素数量
//对于string则可能像下面这样
string(s).swap(s);

第4行vector<type>(v)使用了vector的拷贝构造函数创建了一个匿名vector对象,这个匿名对象调用swap(v)函数,使得该匿名对象所在的内存空间与v所在的内存空间进行交换。

创建的匿名vector对象只将合法的元素拷贝到匿名对象所在的内存空间,而打上非法元素标签的内存空间中的元素则没有拷贝到匿名vector,这样,将这两段内存空间进行置换,可以起到释放内存空间的作用。



引用:

1、cnblogs Tekkaman C++匿名对象

匿名对象在本语句结束之后自动调用析构函数,回收空间。

匿名对象可以使用构造函数,拷贝构造函数创建。创建的语法如第4行,类型后直接加()。

2、伯乐在线 正确释放vector内存

3、新浪博客 naxiaoli2012的博客 C++STL——vector和string

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值