簡體   English   中英

這個代碼是否可以為MULTIMAP分配空閑內存?

[英]Will this code free memory allocated for MULTIMAP?

我有一個multimap和一個指向multimap的指針。 假設我有multimap typedef multimap<class1, class2*> LO_Index; 我也有LO_Index * _index; 哪個指向multimap。 要釋放為此maop分配的所有內存空間,我將執行以下操作。 我有一個Reset函數,它執行以下操作以釋放為此multimap釋放的所有內存空間:

    for ( LO_Index ::iterator i = _index->begin(); i != _index->end(); i++ )
            delete (*i).second;

    // Delete all entries in the index
    _index->erase( _index->begin(), _index->end() );

我在set的情況下讀到的是setname.clear()實際上並沒有釋放所有分配的空間。 但在http://www.cplusplus.com/reference/stl/multimap/erase/我發現了擦除

這有效地減少了容器大小,刪除了元素的數量,調用每個元素的析構函數。

所以我想它實際上將釋放分配的空間。 但是我想確認我的reset函數中寫的代碼是否實際上是在釋放內存。

對於multimap,delete(* i).second無法編譯,因為您只能通過指針刪除對象而int不是指針。

關於擦除功能:就您而言,條目將從容器中刪除。 分配器可能決定不返回內存,而是將其緩存以便重用,但是,這僅在有限的情況下才有意義。

暫無
暫無

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

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