Нет, obj
не может быть NULL
.
Если new
завершится неудачей, возникнет исключение std::bad_alloc
. Если исключение не было выдано, obj
гарантированно указывает на полностью инициализированный экземпляр Object
.
Существует вариант new
, который не вызывает исключение
Object *obj = new(nothrow) Object();
В этом случае obj
будет NULL
, если new
не удастся, и исключение std::bad_alloc
не будет выдано (хотя конструктор Object
, очевидно, все еще может генерировать исключения).
На некоторых старых компиляторах new
может не выдавать исключение и вместо этого возвращать NULL
, но это не соответствует стандартам поведения.
Если вы перегружены operator new
, он может вести себя по-разному в зависимости от вашей реализации.