В чем разница между int `* p = new int (5);` и `int * p = new int [5];` - PullRequest
2 голосов
/ 23 марта 2019

Мне просто нужно понять, в чем различия:

int *p = new int[5];

и

int *p = new int(5);

1 Ответ

7 голосов
/ 23 марта 2019

Каждый создает массив из пяти int с и назначает указатель на первый элемент этого массива на p.Ни одно из целых чисел в этом массиве не инициализировано:

int *p = new int[5]; // a pointer to an array of 5 integers

Другое создает один int и назначает указатель для этого int на p.Это целое число инициализируется с помощью 5:

int *p = new int(5); // a pointer to an int

Как указывает tadman в своем комментарии, по сути, разница между operator new и operator new[].new[] выделяет массив, и должен быть удален с помощью delete[], тогда как new выделяет отдельный объект и должен быть удален с delete.Если вы удалите с неправильным оператором, то произойдет неопределенное поведение.Конечно, если вы не являетесь разработчиком библиотеки, вы должны обычно предпочитать умные указатели и контейнеры библиотеки вместо new и new[].

...