【问题标题】:C++ what happen to reference when a vector resize its capacity? [duplicate]当向量调整其容量时,C++ 会发生什么引用? [复制]
【发布时间】:2019-01-05 06:25:41
【问题描述】:

假设我们有一个对向量中元素的引用。 (我不确定引用后面会发生什么,但我猜引用包含指向确切元素的指针。)

我们不断地把东西推入那个向量,然后它达到它的容量,然后调整自己的大小。调整大小的情况是它可能会在内存中请求一个新空间,然后将原始数据复制到新空间。现在,参考点变得不确定的内存。

我不确定我的猜测是否正确。这会发生吗?或者我的理解是错误的......如果是这样的话,那么使用对容器元素的引用可能会很危险......

【问题讨论】:

  • 调整std::vector 的大小时,所有指针、迭代器或对元素的引用都将失效。使用它们会产生未定义的行为。实际上,您可能会很幸运(例如,取决于调整大小何时涉及容量更改与何时不更改容量),但不能保证这一点,并且依靠它是实现很难追踪的错误的好方法.
  • std::vector 被调整大小时,指向元素的指针、引用和迭代器将失效,您必须获取新的。
  • 补充@Peter的观点:如果您在推送新元素之前特别确保容量足够大,那么它就不会幸运,并且您可以保证不会有重新分配。

标签: c++


【解决方案1】:

你是对的,当向量容量增加时,新的内存被分配并且所有指向向量元素的引用/指针/迭代器都失效了。

【讨论】:

  • 副本是正确的答案。这是/应该是,只是一个评论。
猜你喜欢
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 2019-01-05
  • 2020-12-06
  • 2012-01-24
  • 1970-01-01
相关资源
最近更新 更多