删除标准库映射
Delete a standard library map
我有一个map<long,myClass *> myMap;
myMap的元素是动态分配的:myMap[1] = new myClass();
等等。我想删除所有分配给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
不,您需要显式地遍历这些值并对它们进行delete
。
最好的解决方案是用map<long,std::shared_ptr<myClass> >
代替。
相关文章:
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- 定义具有非标准签名的自定义映射比较器
- 如何将整数向量插入到键中,标准::映射的值
- 标准::映射::合并的计算时间复杂度
- 标准::映射转换器模板
- 从另一个常量标准::映射初始化一个常量标准::映射的一部分
- 替换标准::映射值时崩溃
- 标准::键映射和/或 boost::any 类型的值的类型检查
- 如果可能,标准::映射分配是否静态
- 如何在标准::映射中try_emplace POD 结构?
- 如何通过套接字传输标准::多映射数据
- 多类型标准映射
- 五月标准::映射键地址值数
- 处理对存储在私有映射中的值的封装访问的标准方法,而不破坏C++中的抽象
- 模板标准::映射为类成员
- 模板标准::映射::迭代器实例化
- C++ 如何在标准::多映射中插入
- 推进标准映射的迭代器
- 标准::映射 标准::集合包含重复的键
- std::映射标准分配器性能与块分配器