new является более безопасным способом выделения памяти, чем malloc, по следующим причинам:
- Проверка совместимости типов. 1 При использовании new проверяется совместимость типов при присваивании возвращённого указателя и производится автоматический вызов конструкторов при создании объектов или массивов объектов. 1
- Автоматическая инициализация памяти. 1 Оператор new выделяет память и автоматически инициализирует её значением по умолчанию для данного типа данных. 1
- Генерация исключения при неудачном выделении памяти. 14 При использовании malloc при неудачном выделении памяти возвращается нулевой указатель, а new генерирует исключение std::bad_alloc. 24
Кроме того, в случае возникновения исключения во время инициализации объекта сначала выполняется возврат выделенной памяти, а затем начинается обработка исключения. 3