我有一个const std::map<std::string, std::vector<double>>成员变量和一个函数const std::vector* foo().我希望这个函数有时会返回一个指向这个地图元素的指针.但是我担心地图可能会重新平衡 - 即使在std::map标记的函数中const- 也会使返回的指针无效.我知道任何后续的地图修改都会使我的指针无效,但这不会发生,因为我已经标记了成员变量const.
我不能像往常一样返回参考,foo需要返回nullptr.
我在做什么安全吗?
标准非常明确:唯一可以使迭代器或指针或引用无效的东西就是删除它指向的元素.您甚至可以插入其他元素而不会使指针无效.见§23.2.4/ 9:
insert和emplace成员不应影响迭代器的有效性和对容器的引用,并且擦除成员应仅使迭代器和对擦除元素的引用无效.