【发布时间】:2016-09-21 00:57:51
【问题描述】:
我想从 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,而不调用我要删除的元素的析构函数?
【问题讨论】:
-
为什么这被否决了?
-
反正不会在那个 scnario 中调用析构函数。
-
你有一个指针。不会调用析构函数。您误解了文档。
-
指针没有析构函数。您的地图包含指针。如果它包含对象,则将调用它们的析构函数。但是您的地图不包含对象。它包含指针。
-
更准确的说,被擦除的会被销毁,但是被擦除的是指针,所以被销毁的只是指针本身,而不是指针指向的地方。
标签: c++ stl unordered-map