向量调用如何在特定位置复制构造函数?

时间:2019-05-14 09:26:32

标签: c++ vector stl

我想知道vector在C ++中如何工作。当我们添加一个新元素并且向量耗尽空间时,它会分配一个新内存并将所有先前的元素复制到新位置。

现在,如何定义此行为?

A* a = new A(prev_a);

将在new分配的新位置复制构造。但是对于矢量,我们必须分配多个对象。但是我们不能这样做,因为new数组不能有初始化参数。

所以我想知道vector如何实现这一点?我假设向量首先分配了一个内存,然后在特定位置调用了复制构造函数。怎么做?谢谢

1 个答案:

答案 0 :(得分:5)

  

我假设向量首先分配一个内存,然后在特定位置调用一个拷贝构造函数。

是的,这是两个单独的步骤:

  1. 使用allocator::allocate进行内存分配。
  2. 初始化。它使用allocator::construct(通常使用new放置)复制/移动构造元素。