是否有必要在std :: vector <pair <vector <int>,int >>中"嵌套"释放保留内存以供手动释放吗?

Umb*_*ert 1 c++ memory-management c++11

我有:

vector< pair<vector<int> , int> > mapped_samples;
Run Code Online (Sandbox Code Playgroud)

这非常大.我会手动释放内存.我知道一个简单的向量的技巧是:

vector<int> simple_vector;
vector<int>().swap(simple_vector); 
Run Code Online (Sandbox Code Playgroud)

在我的情况下,它可以做到:

vector<pair<vector<int> , int>>().swap(mapped_samples);
Run Code Online (Sandbox Code Playgroud)

或者必须做一些嵌套操作?

(我正在使用C++ 11)

Sha*_*ger 6

如果绝对必须保证vector在函数作用域退出之前清除它,只需添加其他作用域.

原始代码:

... myfunc(...) {

    ... stuff without vector ...

    vector< pair<vector<int> , int> > mapped_samples;

    ... stuff using vector ...

    ... more stuff without vector ...

}
Run Code Online (Sandbox Code Playgroud)

确保vector在东西停止使用后完全消失,只需添加大括号:

... myfunc(...) {

    ... stuff without vector ...

    {  // Start of vector's block scope
        vector< pair<vector<int> , int> > mapped_samples;

        ... stuff using vector ...

    }  // End of vector's block scope, guaranteed to be cleaned here

    ... more stuff without vector ...

}
Run Code Online (Sandbox Code Playgroud)

这比swap技巧(必须创建和销毁垃圾vector)更清洁,更通用; 它适用于所有RAII资源,实际上是常用的方法std::lock_guard.