簡體   English   中英

C ++中的容器數據類型(字符串,向量等)何時/如何釋放其動態分配的內存?

[英]When/How do container data types (string, vector, etc.) in C++ free their dynamically allocated memory?

由於容器數據類型具有動態大小,因此我假設它們在堆上分配內存。 但是何時/如何釋放分配的內存?

當它們超出范圍時(如果容器是在堆棧中創建的),或者當您在容器上顯式調用delete時(對於基於堆的容器),它們將被釋放。 發生這種情況時,將自動調用容器的析構函數,然后釋放為該容器分配的堆內存(包含數據)。

簡單地刪除容器中的元素並不一定會立即釋放內存,因為STL容器通常使用緩存來加快處理速度。 請記住,新/刪除操作的成本相對較高。

當銷毀它們時,它們釋放析構函數中的內存。 (如果容器本身是堆分配的,則可以通過調用deletedelete []來銷毀它們;如果是堆棧分配的,則可以通過超出作用域來銷毀它們)

簡短答案:從其中刪除元素時。

通常,當您從容器中移除元素達到其先前的增長閾值時會發生這種情況。 這是一個實現細節,但是通常例如向量創建一個N T的內部數組。

當您插入N個以上的T時,向量將重新分配其內存並增長到N的某個倍數(再次-實現細節)以存儲新元素,移除也會發生同樣的情況-從向量中移除元素時,收縮會在任何時候收縮達到N的前一個倍數...直到最后只得到N的一個倍數;如果清除並縮小為N,則返回0

當向量對象被破壞時,堆內存(節點存儲)也會被刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM