2013-04-10 93 views
4

我有一個地圖充滿,現在我想完全刪除內存。我該如何做到這一點?找不到任何具體的這個話題,對不起,如果它已經回答了...刪除內存std :: map <int, string>完全刪除內存

我的代碼是這樣的:

 for(std::map<short,std::string>::iterator ii=map.begin(); 
ii!=map.end(); ++ii) 
    { 
     delete &ii; 
    } 

但它不工作。任何人都可以幫忙嗎?

問候, 菲爾

回答

9

做是正確的方式是不這樣做。一個map將自動釋放資源,當它被自動分配的任何東西銷燬時。

除非您將值分配給new,否則您不需要delete他們。

{ 
    std::map<short,std::string> x; 
    x[0] = "str"; 
} 
//no leaks here 

{ 
    std::map<short,std::string*> x; 
    x[0] = new std::string; 
    delete x[0]; 
} 
+0

我的地圖是這樣填充的: map [0] =「someString」; 它仍然會給我Mem-Leaks! 如果我不使用我的程序中的地圖,我沒有任何泄漏,所以它一定是我猜的地圖。 – skylla 2013-04-10 11:26:21

+1

@ user1971024好吧... – 2013-04-10 11:27:19

+0

@ user1971024你怎麼知道它有mem泄漏? – Angew 2013-04-10 11:29:12

5

只需致電map.clear();即可。這將釋放地圖在內部分配的所有對象。

請注意,在像任務管理器這樣的系統工具中,應用程序仍然可以顯示相同數量的內存佔用。操作系統完全有可能決定不回收你的進程曾經擁有的內存,以防再次分配它。如果它開始不足,它會在以後收回。

+0

感謝您的回答,但這也沒有幫助。 仍然是相同的MemoryLeak – skylla 2013-04-10 11:32:34