Каждый создает массив из пяти 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[]
.