删除c ++地图中的指针

时间:2012-12-20 05:40:46

标签: c++ stl map

我有一张地图

std::map<std::string, my_class*> name2ptr;

我尝试删除地图的内容,首先遍历地图以删除my_class指针,然后清除地图。现在,当地图中只有一对时,我遇到了问题。地图现在只有一个条目

<"ajay", 0xabcd> 

它在删除时崩溃((* itr).second)。 for循环如下。

name_map_type::iterator itr;
    for( itr= name2ptr.begin();itr!=name2ptr.end();itr++){
        if((*itr).second){
            delete ((*itr).second);
        }
    }
name2ptr.clear();

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

你把坏指针放到地图上了吗?首先,无需在nullptr上检查(*itr).second; delete nullptr完全可以,它不会做任何事情。

您应该将std::shared_ptr<my_class>存储为地图的值类型而不是原始指针。这样,你只需要调用name2ptr.clear(),只要没有别的东西持有对象的引用,它就会被删除。

查看this reference