C でのメモリ管理: ベクターのクリアとオブジェクトの削除
C では、メモリがどのように管理されるかを理解することが重要です。ベクトルやポインタなどの動的データ構造を扱う場合、割り当てられたメモリを適切に解放することが不可欠です。
次のコード例を考えてみましょう。
<code class="cpp">tempObject obj1; tempObject obj2; vector<tempObject> tempVector; tempVector.pushback(obj1); tempVector.pushback(obj2); tempVector.clear();</code>
疑問が生じます。ベクターは、その中のオブジェクトによって占有されているメモリを自動的に解放しますか?
オブジェクトを保持するベクターの場合
clear() を呼び出すと、ベクター内のオブジェクトが破棄されますが、解放されません。割り当てられたメモリ。ベクター要素を繰り返し処理して個別に削除しても役に立ちません。
ベクターに関連付けられたメモリを効果的に解放するには、次の戦略を使用できます。
<code class="cpp">vector<tempObject>().swap(tempVector);</code>
これにより、メモリが割り当てられていない空のベクトルを tempVector と交換し、効果的にメモリの割り当てを解除します。
オブジェクトへのポインタを保持するベクトルの場合
オブジェクトへのポインタを保持するベクトルの動作は同様です。オブジェクト。ポインターのベクトルに対して clear() を呼び出すと、ポインターは破棄されますが、ポインターが参照するオブジェクトは破棄されません。メモリを解放するには、2 つのオプションがあります。
C 11 の shrin_to_fit 関数
C 11 では、shrink_to_fit 関数が導入されました。この関数は、clear( )。理論的にはベクターの容量をそのサイズに合わせて縮小しますが、これは拘束力のないリクエストであり、一部の実装では無視される可能性があることに注意することが重要です。
以上が`vector::clear()` は内部に格納されているオブジェクトのメモリを解放しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。