malloc
- это вызов функции, новым в этом случае является выражение.
Разница в том, чтоnew
выделит память и создаст все элементы этого массива с помощью конструктора по умолчанию.malloc
просто возвращает кусок неинициализированной памяти.
Более того, ::operator new
сгенерирует std::bad_alloc
или новый обработчик, если он был зарегистрирован.
Стандартная библиотека определяет новыйкоторый принимает дополнительный параметр nothrow
, который возвращает указатель 0 в случае неудачного размещения.
int *x = new(std::nothrow) int[20]; // include <new>, return 0 on failure