1. ホーム
  2. c++

[解決済み] C++ delete vector, object, free memory

2022-03-08 02:22:36

質問

C++で物を削除することに関して、全く混乱しています。もし私がオブジェクトの配列を宣言して clear() メンバー関数です。メモリが解放されたことを確認できますか?

例えば.

tempObject obj1;
tempObject obj2;
vector<tempObject> tempVector;

tempVector.pushback(obj1);
tempVector.pushback(obj2);

安全にクリアを呼び出して、すべてのメモリを解放することができますか?それとも、1つずつ削除するために繰り返し実行する必要があるのでしょうか?

tempVector.clear();

このシナリオをオブジェクトのポインタに変更した場合、答えは上記と同じになるのでしょうか?

vector<tempObject> *tempVector;
//push objects....
tempVector->clear();

解決方法は?

クリアを呼び出せば、すべてのオブジェクトを破壊することができますが、それではメモリは解放されません。 個々の要素をループしても、何の役にも立ちません(オブジェクトにどんなアクションを起こそうというのでしょうか?

vector<tempObject>().swap(tempVector);

これは、メモリが割り当てられていない空のベクターを作成し、それを tempVector とスワップすることで、効果的にメモリを解放することになります。

また、C++11では関数 shrink_to_fit を呼び出すと、理論的には、サイズ (現在は 0) に合わせて容量が縮小されます。 しかし、これは非拘束的な要求であり、実装はこれを無視する自由があります。