簡體   English   中英

C ++ STL向量載體和內存管理

[英]C++ STL vector of vectors and memory management

我們有一個場景,需要創建一個

std::vector<std::vector<float>> data;

因為向量的長度並不相同。

釋放數據后,數據中的每個向量都會釋放其空間嗎?

所有標准庫類型都適當地實現了RAII。 也就是說,在對象被銷毀時,它們執行的任何類型的內部動態分配都將自動清除。 您無需擔心。

對於標准容器,例如std::vector ,它將自動確保其每個元素都被銷毀。 當然,如果std::vector的元素本身是std::vector ,它們將依次破壞其元素。 一切都是自動的。

您可能已經看到示例,其中有一個std::vector<T*> ,然后使用new手動分配了T對象。 重要的是要在這里意識到向量的元素不是T對象,而是T*對象。 指針將自動清除。 由於您手動分配了T對象,因此您需要手動取消分配它們。 (正如@Veritas在評論中所說,在這種情況下,您應該更喜歡使用智能指針)

是,每當“數據”的“作用域”結束時,將自動調用析構函數,並釋放為“數據”分配的內存。 每當調用析構函數獲取向量時,就會調用析構函數的每個元素。

假設向量a(5)在這里將調用a [0],a [1],...的析構函數。

類似地,在上述情況下,vector <vector> x; x [0],x [1]的析構函數將被連續調用。

但是這里每個元素x [i]還是一個向量,因此將再次調用x [i] [0],x [i] [1] ...的析構函數。

這樣,所有元素都將被遞歸銷毀。

暫無
暫無

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

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