c++ - 删除 C++ 映射中的指针

标签 c++ stl dictionary

我有一张 map

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

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

<"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();

我该如何解决这个问题?

最佳答案

您是否在 map 中放置了错误的指针?首先,不需要检查 nullptr(*itr).second ; delete ing nullptr完全没问题,它不会做任何事情。

你应该看看存储 std::shared_ptr<my_class>作为 map 的值类型而不是原始指针。这样,您只需调用 name2ptr.clear() ,并且只要没有其他对象持有对该对象的引用,它就会被删除。

查看 this reference .

关于c++ - 删除 C++ 映射中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13965988/

相关文章:

javascript - 将经度纬度转换为瓦片坐标

android - 何时在 Android NDK 中使用 JNIEXPORT 和 JNICALL?

c++ - 无法打开文件,datafile2 的 mystate =2

c++ - 绕过基类构造函数调用

c++ - 如何在 MAP STL : C++ 中显示 LIST 中包含的值

c++ - 比较 googlemock 中指针的容器

c++ - 在奇怪的循环模板模式(CRTP)中,依赖类型名称何时成为完整类型?

c++ - 如何以毫秒为单位获取当前时间?

python - 如何测试字典是否包含某些键

python - 如何将字典变成字符串?