【发布时间】:2020-02-07 01:34:05
【问题描述】:
我想使用指向存储在 std::map 中的资源的指针作为资源的句柄,但为了使其正常工作,std::map 由于从地图中插入/删除而无法移动其包含的任何元素。例如:
class Resource { ... }
std::map<std::string, Resource> resources;
resources["one"] = Resource( ... );
Resource *handle = &resources["one"];
resources["two"] = Resource( ... );
handle->doSomething(); // Is handle guaranteed to still point to the same resource?
我找不到任何说明元素是否可以移动的文档,std::map 可以包含不可复制和不可移动的类型,但是我想确定这不是对这种类型的某种预期适应。
【问题讨论】:
-
我猜invalidates an iterator 会使指针失效,但这只是一个猜测。
-
AFAIK
std::map存储节点句柄而不是直接存储元素。插入新元素不应更改元素本身的实际位置,但可能会使对任何节点句柄的引用无效。不过,请带着一粒盐吃这个