Does new[] call default constructor in C++?

When I use new[] to create an array of my classes:

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

I see that it calls a default constructor of A count times. As a result arr has count initialized objects of type A. But if I use the same thing to construct an int array:

int *arr2 = new int[count];

it is not initialized. All values are something like -842150451 though default constructor of int assignes its value to 0.

Why is there so different behavior? Does a default constructor not called only for built-in types?

32
задан flashnik 26 August 2010 в 13:24
поделиться

3 ответа

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

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

new int[size]();
54
ответ дан 27 November 2019 в 20:39
поделиться

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

0
ответ дан 27 November 2019 в 20:39
поделиться

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

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

3
ответ дан 27 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: