Стандартный C ++ генерирует исключение, если запрошенная память не может быть выделена. Если вы хотите NULL вместо исключения, тогда синтаксис будет
Whatever *p = new (std::nothrow) Whatever;
Этот синтаксис является всего лишь случаем выделения с "размещением нового", которое позволяет функции распределителя получать параметры.
В большинстве случаев я проверял NULL после new
в коде Visual C ++, где поведение по умолчанию ::operator new
- возвращать NULL вместо того, чтобы вызывать исключение, как требует стандарт (это IMO из многих областей, в которых Microsoft пыталась (все еще пытается?) бороться с переносимым кодом).