完全删除std :: map <int,string =“”>的内存</int,>

时间:2013-04-10 11:24:00

标签: c++ map stl free

我有一张地图,现在我想完全删除内存。我该怎么做?找不到这个主题的任何内容,对不起,如果已经回答了......

我的代码是这样的:

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

但它不起作用。有人可以帮忙吗?

的问候, 菲尔

2 个答案:

答案 0 :(得分:10)

正确行事的方法不是这样做。 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];
}

答案 1 :(得分:7)

只需致电map.clear();即可。这将释放地图在内部分配的所有对象。

请注意,在任务管理器等系统工具中,您的应用程序仍然可以显示相同的内存量。操作系统决定不再回收您的进程曾经保存的内存,以防再次分配它。如果它开始不足,它会在以后收回它。