C 中的記憶體管理:清除向量與刪除物件
在 C 中,了解如何管理記憶體至關重要。在處理向量和指標等動態資料結構時,適當釋放分配的記憶體至關重要。
考慮以下程式碼範例:
<code class="cpp">tempObject obj1; tempObject obj2; vector<tempObject> tempVector; tempVector.pushback(obj1); tempVector.pushback(obj2); tempVector.clear();</code>
問題出現了,是否在vector會自動釋放其內部物件佔用的記憶體嗎?
對於持有對象的向量
呼叫clear()時會銷毀向量內的對象,但不會釋放分配的記憶體。迭代向量元素並單獨刪除它們也無濟於事。
要有效釋放與向量關聯的內存,您可以使用以下策略:
<code class="cpp">vector<tempObject>().swap(tempVector);</code>
這會創建一個沒有分配內存的空向量,並將其與tempVector 交換,有效地釋放記憶體。
對於保存指向物件的指標的向量
該行為與保存指向物件的指標的向量類似。對象。對指針向量呼叫clear()將破壞指針,但不會破壞它們所引用的物件。要釋放內存,您有兩個選項:
C 11 的Shrink_to_fit 函數
C 11 引入了shrink_to_fit 函數,可以在clear(之後調用) )。雖然理論上它會縮小向量的容量以適應其大小,但值得注意的是,這是一個非綁定請求,可能會被某些實現忽略。
以上是`vector::clear()` 是否釋放儲存在其中的物件的記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!