1

我有一张地图

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

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

<"ajay", 0xabcd> 

它在 delete((*itr).second) 处崩溃。for循环如下。

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

我该如何解决这个问题?

4

1 回答 1

3

你在地图上放了一个错误的指针吗?首先,不需要检查nullptron (*itr).seconddeleteing anullptr完全没问题,它不会做任何事情。

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

看看这个参考

于 2012-12-20T05:49:44.503 回答