我有一张动态分配对象的地图,并想知道删除它们的最佳方法是什么?
我在想也许是一名演说者?类似的东西:
studentlist::const_iterator deletemem = studentmap.begin();
for(studentlist::const_iterator deletemem=studentmap.begin(); deletemem!=studentmap.end();++deletemem)
{
Record *z=deletemem->second // Record is the type of object stored in the map student map
delete z;
}
但我不确定,任何帮助都会非常感激!
答案 0 :(得分:4)
您的代码看起来很好。但是,手动删除可能不是异常安全的。您可以考虑使用share_ptr
(the one from Boost,或者,对于值使用C ++ 0x,标准实现)或使用boost::ptr_map
。
编辑:要删除地图中的实际数据,请在删除所有内容后调用studentmap.clear()
。这将删除地图中的所有元素。
编辑2 :例如,由于异常导致您的清理代码未被调用,因此您的解决方案出现问题。在这种情况下,你泄漏内存。要解决这个问题,您可以使用RAII - 成语。上面描述了两种可能的方法。
答案 1 :(得分:1)
更好的解决方案是将动态分配的内存封装在另一个堆栈分配的对象中。这可能是您自己的发明之一,也可以使用新C ++标准中的shared_ptr
类或者来自boost。
答案 2 :(得分:0)
您的代码应该有效,但最后应清除studentmap
。
当然,您还必须使任何其他对象无效,该对象应该包含您要释放的指针的副本,否则您的应用程序可能会崩溃。