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

时间:2016-09-21 00:57:51

标签: c++ stl unordered-map

我想从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,而不调用我要移除的元素的析构函数?

1 个答案:

答案 0 :(得分:0)

首先通过以下方式获取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);
}