C ++ Почему при векторной инициализации вызывается конструктор копирования

Когда вы инициализируете вектор следующим образом:

std::vector<MyClass> MyVec(10);

Он вызывает конструктор по умолчанию один раз, а затем вызывает конструктор копирования еще 10 раз.
Так что, если я правильно понимаю, все объекты в векторе создаются конструктором копирования.

Может кто-нибудь объяснить причину вызова конструктора копирования, а не по умолчанию?
Или даже просто выделять память без объектов?

8

Решение

Он будет выделять память без объектов, за исключением того, что вы указали начальный размер 10, поэтому имеет создать 10 объектов. Если вам нужна память для 10 объектов без их фактического создания, вы можете сделать что-то вроде:

 std::vector<MyClass> MyVec;
MyVec.reserve(10);

Если вы посмотрите подпись используемого вами конструктора, это будет что-то вроде:

vector(size_t num, T initial_value = T());

Это позволит вам передать значение, которое будет использоваться, чтобы заполнить места, которые вы указали для создания. Если вы не укажете значение, оно создаст его (с ctor по умолчанию) для передачи в ctor, а затем сделает копии этого значения в самом векторе.

Там нет реального вопроса, что это мог делать другие вещи, но это обеспечивает разумный баланс между простотой (не указывайте значение), универсальностью (укажите значение, если хотите) и размером кода (избегайте дублирования всего ctor только для создания содержимого по умолчанию).

15

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector