jaz*_*azz 0 c++ vector push-back memory-address
我有一个类对象的向量.函数随机选择两个元素并返回其地址.
现在使用这两个元素,我想生成同一个类的两个新对象,并使用push_back将它们添加到向量中.
这是两个父元素的地址:
这里没问题.然后生成第一个子对象,并使用vector_pushback将其添加到向量的末尾.问题是,在执行了push_back命令之后,似乎父对象的地址发生了变化.这是push_back之后的调试器状态:
正如您所看到的,地址显然保持不变,但看起来它们指向push_back之后的垃圾值.据我所知,push_back在向量的末尾添加了一个元素.因此,我希望2个元素的地址根本不会改变.
怎么了?
TL; DR版本:
插入操作可以使任何指针,引用或迭代器无效std::vector.
完整说明:
A std::vector有两个有用的指标:
capacity >= size 每时每刻.
这capacity是内部动态分配的数组的长度.* 插入元素时,size增量为1.但一旦到达capacity,必须分配一个新的更大的数组(因此增加capacity).这需要复制所有元素,并删除原件.所以他们所有的地址都改变
std::vector.