Jac*_*cob 34 c++ memory-management stl vector
第一个解决方案是:
std::vector<int> *vec = new std::vector<int>;
assert(vec != NULL);
// ...
delete vec;
Run Code Online (Sandbox Code Playgroud)
另一种选择是:
std::vector<int> v;
//...
vec.clear();
vec.swap(std::vector<int>(vec));
Run Code Online (Sandbox Code Playgroud)
第二种解决方案有点诀窍 - 这种"正确"方式是什么?
我知道析构函数一旦离开堆栈就会被调用,我很好奇其他方法.
Jar*_*Par 37
解除分配矢量的最简单和最可靠的方法是在堆栈上声明它并且什么都不做.
void Foo() {
std::vector<int> v;
...
}
Run Code Online (Sandbox Code Playgroud)
C++保证v在方法执行时将调用析构函数.析构函数std::vector将确保释放它分配的任何内存.只要T类型vector<T>具有适当的C++解除分配语义所有都会顺利.
Mik*_*our 15
在不破坏矢量对象本身的情况下,释放向量中所有存储的最简单方法是
vec = std::vector<int>();
Run Code Online (Sandbox Code Playgroud)
你的第二个变体将具有相同的效果,但它会在途中跳过更多的箍."复制和交换"技巧会释放向量中的任何额外容量,如果它包含您想要保留的某些数据,则会很有用.如果没有数据,则无需复制或交换.
def*_*ode 13
std::vector<int> vi;
/*push lots of stuff into the vector*/
// clean it up in C++03
// no need to clear() first
std::vector<int>().swap(vi);
// clean it up in C++0x
// not a one liner, but much more idiomatic
vi.clear();
vi.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72886 次 |
| 最近记录: |