You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++17中std::pair内vector重分配是否会导致引用失效?

问题

定义如下std::pair对象:

std::pair<std::vector<int>, int> p;

并获取其两个元素的引用:

auto& firstVect = p.first;
auto& secondNumber = p.second;

当调用firstVect.emplace_back(someNumber)导致vector发生重分配时,firstVect这个引用是否会失效?已知vector重分配会使其自身的元素引用/迭代器失效,但不清楚嵌套在pair中的vector出现此情况时,对vector对象的引用是否能保留,使用C++17标准。

解答
  • firstVect是对p.first这个vector对象本身的引用,而非对vector内部存储元素的引用。
  • vector重分配的本质是:为了容纳更多元素,vector会申请一块新的内存缓冲区,把旧元素拷贝/移动过去,然后释放旧缓冲区。这个过程只会改变vector内部管理的内存地址,但vector对象自身的内存位置(也就是p.first的位置)完全没有变化。
  • 因此,只要p这个pair对象本身没有被销毁或移动,对p.first的引用firstVect就不会失效,后续依然可以通过它正常操作这个vector对象。
  • 需要注意:重分配会导致vector内部元素的引用、迭代器、指针失效,但这和你持有的vector对象引用是完全独立的两回事。

内容的提问来源于stack exchange,提问作者TheMemeMachine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:35:23