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)
如果绝对必须保证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.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |