NL3*_*NL3 1 c++ dictionary pointers
我有一个地图,使用字符串作为键和自定义对象的指针作为值.在运行时,用户可以创建自动添加到地图的此对象(指针)的实例.我使用DrMemory来查看是否有任何泄漏(例如内存泄漏).
所以我测试了应用程序而没有手动删除包含地图的指针,也没有发现错误(因此也没有发生内存泄漏).为了安全起见,我还使用一种方法进行测试,该方法在退出程序时被调用,该方法遍历地图并手动删除每个指针.
当我现在对它进行测试时,我得到了几个相同类型的错误:
无法获得释放的记忆......
出现的行指向清理方法的位置.
我现在的问题是:我应该保持对清理方法的调用(因此只是忽略错误),还是应该删除它并保留它,因为它知道没有必要手动删除指针?
我正在删除指针并从地图中删除条目
void cleanUp(std::map <string, Car*>* map){
for(auto const& x : *map){
delete x.second;
map->erase(x.first);
}
}
Run Code Online (Sandbox Code Playgroud)
很难说没有看到sourcode,但保持裸指针动态分配的对象(指针不受RAII实现类保护)在任何地方都是不好的做法的标志.学习使用智能指针,你不需要使用任何内存泄漏检测器,它可以用C++编写而不用担心内存泄漏,使用unique_ptr的示例代码:
std::map<std::string, std::unique_ptr<std::string>> mm;
mm["alpha"] = std::make_unique<std::string>("alpha");
Run Code Online (Sandbox Code Playgroud)