構造体のstd :: vectorがあるとします。ベクトルがclear() 'dの場合、メモリはどうなりますか?
std::vector<myStruct> vecs;
vecs.resize(10000);
vecs.clear();
メモリは解放されますか、それとも再利用可能なバッファとしてvecs変数にアタッチされますか?
メモリはベクターにアタッチされたままです。解放したい場合、通常は空のベクターと交換します。 C++ 11は shrink_to_fit
ほぼ同じ機能をより直接的に提供することを目的としたメンバー関数ですが、バインドされていません(つまり、余分なメモリを解放する可能性がありますが、そうする必要はありません)。
ベクターのメモリがクリアされることは保証されていません。クリア後に要素に安全にアクセスすることはできません。メモリの割り当てを確実に解除するには、Scott Meyersがこれを行うことをお勧めします。
vector<myStruct>().swap( vecs );
Cplusplus.com には次のように書かれています:
ベクトルからすべての要素を削除し、それぞれのデストラクタを呼び出して、コンテナのサイズを0のままにします。
ベクトルの容量は変化せず、この関数の呼び出しによる再割り当ては発生しません。再割り当てを強制する典型的な代替手段は、swapを使用することです:...
デストラクタはオブジェクトに対して呼び出されますが、メモリは割り当てられたままです。
いいえ、メモリは解放されません。
C++ 11では、shrink_to_fit
メソッドを使用して、ベクターにメモリを解放させることができます。