从映射中删除动态分配的内存
Deleting dynamically allocated memory from a map
我有一个动态分配对象的映射,想知道删除它们的最佳方法是什么?
我在想也许是一个互动者?像这样:
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;
}
但我不确定,任何帮助将不胜感激!
你的代码看起来不错。但是,手动删除可能不是异常安全的。您可以考虑使用share_ptr
(来自 Boost 的那个,或者,如果您使用 C++0x,则为标准实现)作为值或使用 boost::ptr_map
。
编辑:要删除地图中的实际数据,请在删除所有内容后调用studentmap.clear()
。这将从地图中移除所有元素。
编辑 2:例如,当由于异常而未调用清理代码时,会出现解决方案的问题。在这种情况下,您会泄漏内存。要克服这个问题,您可以使用 RAII 习语。上面描述了两种可能的方法。
更好的解决方案是将动态分配的内存封装在另一个堆栈分配的对象中。这可以是您自己的发明之一,也可以使用新C++标准或 boost 中的 shared_ptr
类。
你的代码应该可以工作,但你应该在最后清除studentmap
。
当然,您还必须使任何其他对象无效,这些对象应该包含您正在解除分配的指针的副本,否则您的应用程序可能会崩溃。
相关文章:
- 对具有动态分配的内存和析构函数的类对象的引用
- 调用析构函数以释放动态分配的内存
- 在运行时为动态分配的内存输入值
- 释放动态分配的内存时是否需要执行此额外步骤
- 动态分配字符数组的内存
- 销毁C++中动态分配的内存(数组对象)
- 删除类成员的动态分配内存的最佳方法是什么
- 动态分配的内存构造函数
- 为什么动态分配的内存总是16字节对齐
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 为什么动态分配的两个变量的内存位置不是连续的?
- 为浮点数组动态分配内存
- 动态分配 8 字节的内存
- 包含动态分配内存作为值的映射的取消定位速度有多快?
- STD分配器是否会在堆上动态分配内存?它可以安全地删除内存吗?
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- 在C 中动态分配的内存的问题
- 为什么在 C++ 执行删除操作后仍可以访问释放的动态分配的内存
- 对内存动态分配的类不使用"*"的逻辑
- 如果我将内存动态分配给静态变量,我应该释放它还是会自动释放它