我有一个类对象的向量。函数随机选择两个元素并返回它们的地址。
现在使用这两个元素,我想生成同一个类的两个新对象,并使用push_back将它们添加到向量中。
以下是两个父元素的地址:
这里没问题。然后生成第一个子对象,并使用vector_pushback将其添加到向量的末尾。问题是,在执行了push_back命令之后,似乎父对象的地址发生了变化。这是push_back之后的调试器状态:
正如您所看到的,地址显然保持不变,但看起来它们指向push_back之后的垃圾值。据我所知,push_back在向量的末尾添加了一个元素。因此,我希望2个元素的地址根本不会改变。
怎么了?
答案 0 :(得分:7)
TL; DR版本:
完整说明:
std::vector
有两个有用的指标:
capacity >= size
。
capacity
是内部动态分配数组的长度。 * 插入元素时,size
增加1.但是一旦达到{{} 1}},必须分配一个新的更大的数组(因此增加capacity
)。这需要复制所有元素,并删除原件。所以他们所有的地址都会改变。
<小时/> *这是
capacity
。 的典型内部实现
答案 1 :(得分:2)
push_back
会导致重新分配和移动向量中的所有元素。