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。次に、一時オブジェクトが破棄され、変数で割り当てられたメモリが再利用されます(メモリが一時メモリにスワップされたため)。

これは「ShrinktoFitIdiom」と呼ばれます

于 2013-03-22T06:35:17.570 に答える