c++ vector释放概述
这里仅为概述,具体的详情分析,可以Google下,会得到更详尽的解释。
1、函数clear和erase都将数组的size清空,但对应的空间并没有回收,而且,一直push_baclk, 对应的capacity会越来越大。 vectoer的size和capacity是两个不同的概念。
//std::vector<std::string>::iterator & it = _file_arr.begin(); //for (; it != _file_arr.end(); ) // it = _file_arr.erase(it);
释放并回收空间用下面的方法, swap 函数:
2、声明
std::vector<std::string> _file_arr;
3、释放并回收
_file_arr.swap(std::vector<std::string>());
4、亦或者调用下面函数,仅为参考。
template < typename T > void clear_vector(std::vector< T >& vt) { std::vector< T > vector_arr; vector_arr.swap(vt); }
5、原理分析:
利用临时变量实现空间的回收,上面4 中的vertor_arr的生命周期仅在函数体内,当函数执行结束,临时变量会被回收,进而释放回收对应的空间。