Нет, тебе не нужно проверять NULL после p = new Fred(). В стандартном C++ оператор new выбрасывает исключение std::bad_alloc, если выделение памяти не удаётся, вместо того чтобы возвращать NULL, как это делает malloc().
Проверка NULL после каждого выделения памяти создаёт многословный, скучный код:
Fred* p = new Fred();
if (p == NULL) {
// обработать ошибку
}
С исключениями твой код остаётся чистым и читаемым:
Fred* p = new Fred();
// Проверка NULL не требуется
Когда выделение памяти не удаётся, исключение автоматически выбрасывается. Ты можешь обработать его на более высоком уровне через блоки try-catch, если нужно, вместо того чтобы проверять каждое место выделения памяти.
Старые компиляторы могут не поддерживать это стандартное поведение. Проверь документацию своего компилятора по теме "new", чтобы убедиться в поддержке исключений.
Если используешь MSVC, нужно подключить хотя бы один стандартный заголовочный файл в каком-нибудь .cpp файле, чтобы исключения при ошибке выделения памяти работали корректно. Примеры:
<new><iostream><vector>Подключение любого стандартного заголовка гарантирует, что компилятор использует правильную реализацию оператора new.
В современном C++ считай, что new выбрасывает исключение при ошибке выделения памяти, и пиши код соответственно. Это избавляет от лишних проверок NULL и соответствует актуальным стандартам C++.
Оператор new в стандартном C++ возвращает NULL при неудаче выделения памяти, как и malloc().
Новый — ещё не проверен сообществом
Вы