Wird der neue Operator NULL zurückgeben? [Duplikat]

7

Sprich ich habe eine Klasse Auto und ich erstelle ein Objekt

%Vor%     
ckv 02.08.2010, 15:53
quelle

4 Antworten

28

Bei einer standardkonformen C ++ Implementierung, nein. Die normale Form von new gibt niemals NULL zurück; Wenn die Zuweisung fehlschlägt, wird eine Ausnahme std::bad_alloc ausgelöst (das Formular new (nothrow) wirft keine Ausnahmen und gibt NULL zurück, wenn die Zuweisung fehlschlägt).

Auf einigen älteren C ++ - Compilern (insbesondere solchen, die vor der Standardisierung der Sprache veröffentlicht wurden) oder in Situationen, in denen Ausnahmen explizit deaktiviert sind (z. B. einige Compiler für eingebettete Systeme), kann new bei einem Fehler NULL zurückgeben . Compiler, die dies tun, entsprechen nicht dem C ++ - Standard.

    
James McNellis 02.08.2010, 15:54
quelle
8

Nein, new löst std::bad_alloc bei fehlgeschlagenem Zuweisen aus. Verwenden Sie stattdessen new(std::nothrow) Car , wenn Sie keine Ausnahmen wünschen.

>     
Georg Fritzsche 02.08.2010 15:55
quelle
2

Standardmäßig gibt C ++ eine std :: bad_alloc Ausnahme aus, wenn der neue Operator fehlschlägt. Daher ist die Überprüfung auf NULL nicht erforderlich, es sei denn, Sie haben die Verwendung der Ausnahme explizit deaktiviert.

    
Karel Petranek 02.08.2010 15:54
quelle
1

Ich habe das schon oft gesehen und habe mich gewundert, warum neue Speicherausnahmen ausgelöst werden. Ich denke, es kommt von Entwicklern, die früher in C gearbeitet haben und jetzt C ++ sind.

    
user408823 02.08.2010 15:57
quelle

Tags und Links