Wenn wir C ++ schreiben, nehmen wir die folgende Codezeile an:
%Vor%Wenn diese Zeile kompiliert wird und keine Ausnahmen oder andere sichtbare Fehler verursacht Laufzeitprobleme, kann obj gleich nach der Ausführung dieser Zeile NULL sein?
Nein, obj
kann nicht NULL
sein.
Wenn new
fehlschlägt, wird eine std::bad_alloc
Ausnahme ausgelöst. Wenn keine Ausnahme ausgelöst wurde, zeigt obj
garantiert auf eine vollständig initialisierte Instanz von Object
.
Es gibt eine Variante von new
, die keine Ausnahme auslöst
In diesem Fall wird obj
NULL
sein, wenn new
fehlschlägt, und die std::bad_alloc
Ausnahme wird nicht ausgelöst (obwohl der Konstruktor von Object
natürlich immer noch Ausnahmen auslösen kann).
Bei einigen älteren Compilern gibt new
möglicherweise keine Ausnahme aus und gibt stattdessen NULL
zurück, aber dies ist kein standardkonformes Verhalten.
Wenn Sie operator new
überladen haben, verhält es sich je nach Ihrer Implementierung möglicherweise anders.
Nein, es sei denn, Sie haben Ausnahmen deaktiviert oder std::new
überlastet, um etwas anderes als das Standardprogramm zu tun (das std::bad_alloc
bei einem Fehler auslöst).
(Ich bin mir nicht sicher, wie std::new
sich verhält, wenn Ausnahmen deaktiviert sind, aber eine Diskussion darüber ist verfügbar hier ...)