0

我有一个看起来像的数据结构

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);

我可以回收记忆吗?

4

1 回答 1

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”

于 2013-03-22T06:35:17.570 回答