No, no puede ser obj
NULL
.
Si new
falla, lanzará una excepción std::bad_alloc
. Si no se lanzó ninguna excepción, se garantiza que obj
apunta a una instancia completamente inicializada de Object
.
Hay una variante de new
que no lanza una excepción
Object *obj = new(nothrow) Object();
En este caso, habrá obj
NULL
si new
falla, y el std::bad_alloc
excepción no será lanzado (aunque constructor Object
's obviamente todavía puede arrojar excepciones).
En algunos compiladores anteriores, new
podría no arrojar una excepción y, en su lugar, devolver NULL
, pero este comportamiento no es compatible con los estándares.
Si ha sobrecargado operator new
, podría comportarse de manera diferente según su implementación.
O a menos que hayas hecho algo como '#define new new (nothrow)' ¿quizás? ;) –
@Karl Knechtel: Es un comportamiento indefinido – Puppy
¿Qué sucede cuando se compila sin excepciones? ¿Utilizará la versión de nothrow automáticamente? –