2013-05-17 54 views
0

的每次迭代我有一個結構如何釋放內存的結構,指針循環

typedef struct { 
    unsigned ccc; 
    unsigned ddd; 
    unsigned aaa; 
    unsigned bbb; 
    string ddd; 

} objinfo; 

已經參與到以下地方在我的代碼:

objinfo obj_tmp 
multimap<string, objinfo> obj_map; 
multimap<string, objininfo>::iterator it; 
std::pair<multimap<string, objinfo>::iterator, multimap<string,objinfo>::iterator> Krange; 

每個循環我將需要拋出舊的objinfo,obj_map並替換一個新的對象信息。 我可以做obj_map.clear()來清理地圖。

我還應該做些什麼來釋放與每個循環後舊對象 的結構,指針和映射有關的內存?

+3

這真的取決於你如何爲你的結構分配內存。你的結構很可能在棧上,因此不需要手動內存管理 –

+0

只需使用自動對象和內存管理就可以完成。 –

+0

非常感謝!我的理解是,如果我聲明對象結構爲objinfo obj_tmp它是在堆棧上。但如果我使用「新」,那麼我應該把它與「刪除」(然後它在堆上),對吧?那麼指針怎麼樣?它的內存也會在每個循環之後釋放(假設我的聲明全部在循環中)? – user1830108

回答

2

當你調用multimap::clear()時,它會調用multimap中每個元素的析構函數。所以只要你的元素不是指針,你的對象就會被銷燬並且它們的內存將被釋放。如果在multimap中確實有指針作爲元素,則在致電multimap::clear()之前,您需要在每個項目上調用delete。 (假設你是對象的所有者)。

0

根據你共享的代碼,它看起來像你所要做的就是讓對象超出範圍。他們的析構函數會自動運行併爲您清理所有內容。所以,基本上,你不需要做任何事情。 :-)

我這樣說是因爲我看不到手動創建需要相應手動刪除的對象(例如,沒有newmalloc)。