`unordered_map::erase()`总是立即调用析构函数吗?

问题描述 投票:0回答:1

说我有

std::unordered_map<int, Foo> myMap;
。如果我调用
myMap.erase(1);
Foo
的析构函数总是会立即被调用吗?或者标准库是否可以根据需要保留在
Foo
的实例上,并且以后可以重用它?

(我明白,当地图本身被摧毁时,一切最终都会被正确摧毁。)

c++ destructor unordered-map
1个回答
0
投票

我查看了https://eel.is/c++draft/#containers,看来实际上并不需要。销毁地图和其他一些操作需要销毁元素,但我看到的唯一明确需要节点 destruction 的变异方法是

pop_back
pop_front

从理论上讲,映射似乎可以包含“释放”节点的内部缓存,以供将来的插入重用,并且如果这样做的话,实际上并不需要销毁并重新创建数据本身。

这可能是 C++ 规范中的一个疏忽,如果有人实现了一个没有销毁并重新创建数据的映射,即使他们确实缓存了节点,我也会感到震惊。

© www.soinside.com 2019 - 2024. All rights reserved.