【发布时间】:2019-01-05 06:25:41
【问题描述】:
假设我们有一个对向量中元素的引用。 (我不确定引用后面会发生什么,但我猜引用包含指向确切元素的指针。)
我们不断地把东西推入那个向量,然后它达到它的容量,然后调整自己的大小。调整大小的情况是它可能会在内存中请求一个新空间,然后将原始数据复制到新空间。现在,参考点变得不确定的内存。
我不确定我的猜测是否正确。这会发生吗?或者我的理解是错误的......如果是这样的话,那么使用对容器元素的引用可能会很危险......
【问题讨论】:
-
调整
std::vector的大小时,所有指针、迭代器或对元素的引用都将失效。使用它们会产生未定义的行为。实际上,您可能会很幸运(例如,取决于调整大小何时涉及容量更改与何时不更改容量),但不能保证这一点,并且依靠它是实现很难追踪的错误的好方法. -
当
std::vector被调整大小时,指向元素的指针、引用和迭代器将失效,您必须获取新的。 -
补充@Peter的观点:如果您在推送新元素之前特别确保容量足够大,那么它就不会幸运,并且您可以保证不会有重新分配。
标签: c++