Non, obj
ne peut pas être NULL
.
Si new
échoue, il lancera une exception std::bad_alloc
. Si aucune exception a été levée, obj
est garanti pour pointer vers une instance entièrement initialisés de Object
.
Il existe une variante de new
qui ne jette pas une exception
Object *obj = new(nothrow) Object();
Dans ce cas, obj
sera NULL
si new
échoue, et l'exception std::bad_alloc
ne sera pas jeté (si le constructeur de l » de Object
peut évidemment encore jeter des exceptions).
Sur certains compilateurs plus anciens, new
peut ne pas générer d'exception et renvoyer plutôt NULL
à la place, mais ce comportement n'est pas conforme aux normes.
Si vous avez surchargé operator new
, il pourrait se comporter différemment en fonction de votre mise en œuvre.
Ou à moins que vous ayez fait quelque chose comme '#define new new (nothrow)' peut-être? ;) –
@Karl Knechtel: C'est un comportement non défini – Puppy
Que se passe lorsque vous compilez sans exception? Utilisera-t-il automatiquement la version nothrow? –