2012-07-16 111 views
0

假設我在C++中創建了一個STL映射對象,即map<string,char>mymap``$。現在,我想知道內存是如何分配給這個對象的?我的困惑之處在於沒有動態分配,我們不知道之前的容器大小。那麼,從哪裏以及如何將內存分配給對象mymapC++ STL對象的內存分配

+0

當然有動態分配(可能不一定是從開始,但肯定是在開始插入東西后)。這只是在課堂上。 – Jon 2012-07-16 19:43:12

回答

1

那麼,從哪裏以及如何將內存分配給對象mymap?

所有標準容器的默認分配器是std::allocator,從容器獲取內存的位置和釋放位置到內存的完成位置。您可以使用自定義分配器,然後根據需要跟蹤所有分配和釋放。

3

沒有動態分配

肯定有,但它的引擎蓋下。 std::map通常以樹的形式存儲,因此無論何時將新對象插入新節點,都會分配新節點。動態。僅僅因爲你沒有明確寫出new,並不意味着它不會發生。

std::map的析構函數上,節點被自動刪除。但請注意,如果節點包含動態分配的對象,則這些對象不會被地圖刪除。

+0

請讓我知道,如果內存是動態分配的,那麼在引擎蓋下是否釋放內存? – nirprat 2012-07-16 19:58:00

+0

@nirprat是的,讀最後一個短語。 – 2012-07-16 20:06:58