Подтвердить что ты не робот

Новый [] вызывает конструктор по умолчанию в С++?

Когда я использую new [] для создания массива моих классов:

int count = 10;
A *arr = new A[count];

Я вижу, что он вызывает конструктор по умолчанию A count раз. В результате arr имеет count инициализированные объекты типа A. Но если я использую то же самое для построения массива int:

int *arr2 = new int[count];

он не инициализирован. Все значения имеют значение -842150451, хотя конструктор по умолчанию int присваивает значение 0.

Почему существует такое другое поведение? Не конструктор по умолчанию не вызывается только для встроенных типов?

4b9b3361

Ответ 1

См. принятый ответ на очень похожий вопрос. Когда вы используете new[], каждый элемент инициализируется конструктором по умолчанию, за исключением случаев, когда тип является встроенным типом. По умолчанию встроенные типы по умолчанию разделяются.

Чтобы иметь встроенный тип массива, инициализированное по умолчанию, используйте

new int[size]();

Ответ 2

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

Но в вашем случае new просто выделяет достаточно места в памяти для хранения объектов count int, т.е. он выделяет sizeof<int>*count.

Ответ 3

int не является классом, он является встроенным типом данных, поэтому для него не вызывается конструктор.