从unordered_map中删除元素而不调用析构函数

Remove element from unordered_map without calling destructor on it

本文关键字:调用 析构函数 元素 删除 unordered map      更新时间:2023-10-16

我想在不调用析构函数的情况下从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);
}