`std::vector` 中的 `emplace_back` 是如何工作的?

How does `emplace_back` in an `std::vector` work?

我注意到 std::vector 中的 emplace_back 更改了先前向量元素的地址。为什么?

从后备存储的角度来看,push 还是 emplace 都没有关系。争论的区别。

因此,通常的搬迁机制已经到位。当当前分配的连续存储耗尽时,它们将移动元素。

迭代器失效规则保持不变。在 http://en.cppreference.com/w/cpp/container/vector.

上检查“迭代器失效

不幸的是,这是标准的:如果新的 size() 大于 capacity(),那么所有迭代器和引用都将失效。

如果向量后备存储的当前容量不能容纳新元素,则必须分配一个新的、更大的后备存储,将所有现有元素移至其中,然后就地构建新元素。

使用 emplace_back() 不会改变后备存储必须足够大以容纳新元素这一事实。