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的生命周期仅在函数体内,当函数执行结束,临时变量会被回收,进而释放回收对应的空间。