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

Что делает "новый int (100)"?

Возможный дубликат:
- это переменная или функция

Я ошибочно использовал что-то вроде:

int *arr = new int(100);

и он передает компиляцию, но я знал, что это неправильно. Это должно быть

int *arr = new int[100];

Что думает компилятор, когда я написал неверный?

4b9b3361

Ответ 1

Первая строка выделяет один int и инициализирует его 100. Подумайте о int(100) как вызов конструктора.

Поскольку это скалярное распределение, попытка доступа к arr[1] или для освобождения памяти с помощью delete[] приведет к поведению undefined.

Ответ 2

Цитата из Wikipedia new (С++):

int *p_scalar = new int(5); //allocates an integer, set to 5. (same syntax as constructors)
int *p_array = new int[5];  //allocates an array of 5 adjacent integers. (undefined values)

Ответ 3

Он выделяет один объект типа int и инициализирует его значением 100.

Многие люди не знают, что вы можете передать инициализатор на new, там определенная идиома, которая должна быть более широко известна, чтобы избежать использования memset:

new int[100]();

Это будет выделение массива int и нуль-инициализация его элементов.

Кроме того, вы не должны использовать версию массива new. Когда-либо. Там std::vector для этой цели.

Ответ 4

Первый создает одно новое целое число, инициализирует его значением 100 и возвращает указатель на него.

В C/С++ нет разницы между указателем на массив и указателем на одно значение (указатель на массив на самом деле является только указателем на его первый элемент). Таким образом, это допустимый способ создания массива с одним элементом.