More C++ Idioms/空にして最小化(Clear-and-minimize)

空にして最小化(Clear-and-minimize)
編集

意図 編集

コンテナを空にし容量を最小化する。

別名 編集

動機 編集

STL のコンテナはしばしば、実際の要素数よりも多いメモリを確保する。 その結果、コンテナのサイズが拡大するときのメモリ確保を抑えることによる 最適化がもたらされる。 一方、コンテナのサイズが減少した時には、しばしば余分な容量が残る。 コンテナの余分な容量は、メモリリソースの不要な消費になりうる。 空にして最小化(Clear-and-minimize)イディオムは、コンテナを空にして余分な容量を 0 あるいは最小限必要な容量に切り詰め、メモリリソースの消費を抑えるために開発された。

解法とサンプルコード 編集

空にして最小化(Clear-and-minimize)イディオムは、下記で示されているように単純である。

std::vector <int> v;
//... たくさんの push_back と、たくさんの v に対する削除
std::vector<int>().swap (v);

文の前半では、std::vector<int>() により、整数の一時的な vector が作成される。 ここで、0 あるいは実装上の最小のメモリが確保されることが保証される。 文の後半では、throw しない swap(non-throwing swap)イディオムを用いて、一時的な vector と v とが効率的に swap (交換)される。 swap の後で、コンパイラによって作成された一時オブジェクトはスコープを外れ、もともと v によって保持されていたメモリ領域が解放される。

既知の利用 編集

関連するイディオム 編集

References 編集