C で動的メモリを操作する場合、オブジェクトの管理とメモリの解放は混乱する可能性があります。この記事では、C でのオブジェクトの削除に関する誤解について説明します。
次のコード スニペットを考えてみましょう。
<code class="cpp">tempObject obj1; tempObject obj2; vector<tempObject> tempVector; tempVector.push_back(obj1); tempVector.push_back(obj2);</code>
ベクトルで clear() を呼び出すと、破棄されます。その中に保存されているオブジェクト。ただし、割り当てられたメモリは自動的に解放されません。メモリを解放するには、より明示的なアクションが必要です。
<code class="cpp">vector<tempObject>().swap(tempVector);</code>
空のベクトルを元のベクトルと交換すると、tempVector によって占有されていたメモリの割り当てが効果的に解除されます。
tempVector がオブジェクトへのポインタのベクトルとして定義されている場合:
<code class="cpp">vector<tempObject *> *tempVector; // Push objects... tempVector->clear();</code>
この場合、clear() はベクトル内のポインタが指すオブジェクトのメモリの割り当てを解除しますが、ポインタ自体はまだ残っています。
clear() はベクター内のオブジェクトを破棄しますが、割り当てられたメモリは解放しません。メモリを完全に再利用するには、空のベクトルと交換するか、C 11 で shrin_to_fit() を使用するなどの明示的なアクションが必要です。 C プログラムでメモリを効果的に管理するには、これらの微妙な違いを理解することが重要です。
以上がC のベクトルによって使用されているメモリを完全に解放するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。