8

我有一张地图,现在我想完全删除内存。我该怎么做?找不到与此主题相关的任何内容,抱歉,如果已经回答...

我的代码是这样的:

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

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

问候,菲尔

4

3 回答 3

12

正确做事的方法是不去做。Amap将在销毁任何自动分配的资源时自动释放资源。

除非您使用 分配值,否则您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];
}
于 2013-04-10T11:25:38.783 回答
10

只需调用map.clear();. 这将释放地图内部分配的所有对象。

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

于 2013-04-10T11:28:31.800 回答
0
if(m_mapModels.size() > 0)
{
    for(map<short,std::string>::iterator it=m_mapModels.begin() ; it!=m_mapModels.end() ; it++)
    {
        delete it->second;
    }
    m_mapModels.clear();
}
于 2022-02-14T07:57:09.457 回答