在这种情况下,我是否需要清空映射的内容以避免内存泄漏
Do I need to empty the contents of a map in this case to avoid memory leaks
假设我有一个类作为
struct fooBar
{
std::map<int, std::shared_ptr<foo> > mp_items;
~fooBar()
{ /* Destructor does nothing */ }
};
在上述情况下,析构函数是否必须提到mp_items.clear()
或者没有它安全吗?"
由于您的映射包含shared_ptr,因此不需要负责内存管理。当地图超出范围时,它们将自动删除。这里需要注意的一点是,只有当引用计数达到0时,元素才会被删除。
来自cppreference:
std::map::~map()
破坏容器。调用元素的析构函数,并释放已使用的存储。
因此,不需要调用clear()
,因为映射的析构函数为您执行此操作。
唯一需要在析构函数中解除分配内存的情况是,如果为数据成员分配了new
/new[]
,并希望在对象超出范围时结束其生命。在这种情况下,您将在析构函数中调用delete
/delete[]
。
但是,请注意,标准库中有一些内存管理容器可以为您执行此操作,如std::unique_ptr
和std::shared_ptr
等。
相关文章:
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存