从unordered_map中删除元素而不调用析构函数
Remove element from unordered_map without calling destructor on it
我想在不调用析构函数的情况下从STDL无序映射中删除一个元素。例如,假设我有以下内容:
std::unordered_map<size_t, my_obj*> map;
my_obj *ptr = new my_obj();
map[5] = ptr;
map.erase(5); // This calls a destructor on ptr.
是否有一种方法可以让我从映射中删除条目5 -> ptr
,而不调用我要删除的元素的析构函数?
首先获得std::pair
形式的键值对:
std::unordered_map<int,my_obj*>::iterator Itr= map.find(5);
,然后删除Itr的值部分,该部分实际包含my_obj
的指针,如下所示,以避免内存泄漏:
if(Itr not_eq map.end())
{
delete Itr->second;
Itr->second = nullptr;
objects.erase(Itr);
}
相关文章:
- 什么时候调用析构函数
- C++-明确何时以及如何调用析构函数
- C++ 防止在映射中放置()时调用析构函数
- 调用析构函数以释放动态分配的内存
- C++:使用方法调用析构函数的顺序是什么?
- 向量推回调用析构函数时调用析构函数
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- C++,我应该调用析构函数吗?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 为什么这里不调用析构函数
- 在调用 std::bind 的产品后意外调用析构函数
- 为什么在传递给函数而不是构造函数时调用析构函数?
- 如何在C++中调用析构函数
- 为什么为未删除的对象调用析构函数?
- 调用析构函数时出错
- C++ 在不释放内存的情况下调用析构函数
- 为什么在运算符删除中不调用析构函数?
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- 在 postOrderDelete 上调用析构函数时引发的异常