Как вектор вызывает конструктор копирования в определенном месте? - PullRequest
2 голосов
/ 14 мая 2019

Мне было интересно, как работает вектор в C ++.Когда мы добавляем новый элемент и вектору не хватает места, он выделяет новую память и копирует все предыдущие элементы в новое местоположение.

Теперь, как определяется это поведение?

A* a = new A(prev_a);

скопирует конструкцию в новом месте, выделенном новым.Но для вектора мы должны выделить несколько объектов.Но мы не можем этого сделать, потому что массив new не может иметь аргументов инициализации.

Поэтому мне интересно, как vector это реализует?Я предполагаю, что вектор сначала выделяет память и вызывает конструктор копирования в определенном месте.Как это сделать?Спасибо

1 Ответ

5 голосов
/ 14 мая 2019

Я предполагаю, что вектор сначала выделяет память и вызывает конструктор копирования в определенном месте.

Правильно, это два отдельных шага:

  1. Распределение памяти с использованием allocator::allocate.
  2. Инициализация. Он копирует / перемещает-создает элементы, используя allocator :: construct , который обычно использует размещение new.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...