c++ - 删除标准库映射

标签 c++ dictionary std

我有一个 map<long,myClass *> myMap; myMap 的元素是动态分配的: myMap[1] = new myClass(); ETC。 我想删除分配给 myMap 的所有内存元素。 可以用myMap.erase(myMap.begin(),myMap.end());

最佳答案

你必须先删除所有那些动态分配的元素,否则你可能会泄漏内存。

for (std::map<long,myClass *>::iterator iter = myMap.begin();
     iter != myMap.end(); ++iter)
{
   delete (*iter).second;
}

myMap.clear();

更好的方法是使用智能指针:

std::map<long, std::shared_ptr<myClass> > myMap;
std::shared_ptr<myClass> p(new myClass());
myMap[1] = p;
myMap.clear();  // no need to call delete manually anymore, clear is enough 

关于c++ - 删除标准库映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181216/

相关文章:

c++ - <vector> 在不同位置读/写是线程安全的吗?

ios - Swift,不同类型的嵌套字典

python - 比较列表中嵌套字典的最佳方法,Python

c++ 使用 std::list 隐式复制 *this

c++ - 如何在C++中获取排序后保留的列表元素的指针

c++ - struct 中的 std::vector 定义

c++ - 我如何获得无限小的数字(对于分形)

c++ - C++中的函数签名和继承

c++ - 使用 dlib 训练行人检测器的最佳方法

c# - C#中唯一的字符串集