向量推回对元素地址的影响

jaz*_*azz 0 c++ vector push-back memory-address

我有一个类对象的向量.函数随机选择两个元素并返回其地址.

现在使用这两个元素,我想生成同一个类的两个新对象,并使用push_back将它们添加到向量中.

这是两个父元素的地址:

这里没问题.然后生成第一个子对象,并使用vector_pushback将其添加到向量的末尾.问题是,在执行了push_back命令之后,似乎父对象的地址发生了变化.这是push_back之后的调试器状态:

正如您所看到的,地址显然保持不变,但看起来它们指向push_back之后的垃圾值.据我所知,push_back在向量的末尾添加了一个元素.因此,我希望2个元素的地址根本不会改变.

怎么了?

Oli*_*rth 7

TL; DR版本:

插入操作可以使任何指针,引用或迭代器无效std::vector.

完整说明:

A std::vector有两个有用的指标:

  • size,这是存储的元素数量.
  • capacity,这是它当前能够存储的元素数量.

capacity >= size 每时每刻.

capacity是内部动态分配的数组的长度.* 插入元素时,size增量为1.但一旦到达capacity,必须分配一个新的更大的数组(因此增加capacity).这需要复制所有元素,并删除原件.所以他们所有的地址都改变


*这是典型的内部实现std::vector.