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