数据结构向量的内存管理

时间:2013-03-22 06:29:43

标签: c++ memory-management std stdvector

我的数据结构看起来像

template < class T1, class T2 > struct sometype
{
std::vector < T1 > v1;
std::vector < T2 > v2;
T1 deriv[10];
};

我创建了一个数据结构向量

std::vector <sometype <T1, T2>> somevec;

我怀疑是否这样做

somevec.erase(somevec.begin(), somevec.end());
std::vector <sometype <T1, T2>>().swap (somevec);

我可以收回记忆吗?

1 个答案:

答案 0 :(得分:3)

你可以做得更好:

somevec.erase(somevec.begin(), somevec.end());
std::vector <sometype <T1, T2>>().swap (somevec);

您需要做的就是:

std::vector <sometype<T1, T2>>().swap(somevec);

这是因为您创建了一个空的临时文件。然后将空内容与somevec的实际数据交换。然后销毁临时文件并回收用变量分配的内存(因为内存已交换到临时内存中)。

这被称为“Shrink to Fit Idiom”