C ++ 2D矢量清晰按预期工作?

时间:2013-10-31 21:27:56

标签: c++ vector

我想确保以下工作正如我打算没有内存泄漏:

vector<vector <float> > X;
for (int i = 0; i < some_size; i++)
{
     vector<float> column;
     X.push_back(column);
}
// ... use 2D array somehow
X.clear(); 
/* CALLS DESTRUCTOR OF EACH ELEMENT, BUT SINCE EACH ELEMENT
IS A VECTOR, CLEAR IS RECURSIVELY CALLED ON EACH OF THOSE*/

也就是说,clear()递归地应用于向量向量,因为clear是向量析构函数的一部分?

我知道X在超出范围时会被彻底清除,但这不是问题的重点。

2 个答案:

答案 0 :(得分:3)

是和否。它将为顶部向量中的每个元素调用析构函数,每个向量的析构函数将清除它自己的内存(因此它不会为每个内部向量调用clear)。

clear 保证释放顶级向量使用的内存。

答案 1 :(得分:3)

添加到Zac Howland的答案,正如vector<T>::clear的{​​{3}}所示,

  

无法保证重新分配,矢量容量为   由于调用此函数,无法保证更改。一个典型的   强制重新分配的替代方法是使用swap:

vector<T>().swap(x);   // clear x reallocating

这会将临时空向量的内容与x的内容交换。然后将为临时(先前为空)向量调用析构函数,该向量将依次调用其所有向量元素的析构函数,最后将释放所有空间。