Heim >Backend-Entwicklung >C++ >Warum gibt „new' manchmal NULL zurück, anstatt eine Ausnahme auszulösen?

Warum gibt „new' manchmal NULL zurück, anstatt eine Ausnahme auszulösen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-21 17:53:12891Durchsuche

Why Does `new` Sometimes Return NULL Instead of Throwing an Exception?

New() löst eine NULL-Ausnahme aus: Compiler-Konformität

Der C-Standard schreibt vor, dass der neue Operator eine std::bad_alloc-Ausnahme auslöst, wenn Es kann kein Speicher zugewiesen werden. Es wurden jedoch Bedenken hinsichtlich des Verhaltens einiger Compiler geäußert, insbesondere von VC6, die diesen Standard möglicherweise nicht einhalten.

Nichtkonformität von VC6

In diesem Fall von VC6 wurde bestätigt, dass der neue Betreiber den Standard tatsächlich nicht standardmäßig befolgte. Stattdessen wurde bei einem Fehler 0 (NULL) zurückgegeben. Dieses Verhalten stellte Entwickler vor Herausforderungen, da es nach jeder neuen Anweisung explizite Überprüfungen auf NULL erforderte, wodurch der Code ästhetisch unattraktiv wurde.

Antworten und Problemumgehungen von Microsoft

Microsoft hat dies nicht anerkannt -Compliance und stellte eine Problemumgehung mithilfe eines benutzerdefinierten neuen Handlers bereit. Alternativ könnten Entwickler die Objektdatei nothrownew.obj nutzen, um das Verhalten von VC6 in neueren MSVC-Compilern (7.0 und höher) nachzuahmen.

Aktueller Konformitätsstand

Glücklicherweise in MSVC 8.0 (VS2005) wurde das Standardverhalten von new geändert, um dem Standard zu entsprechen, und wirft jetzt a aus std::bad_alloc-Ausnahme im Falle eines Speicherzuweisungsfehlers. Verknüpfungen zu nothrownew.obj sind nur erforderlich, wenn das ursprüngliche VC6-ähnliche Verhalten gewünscht wird.

Option für manuelle Null-Rückgabe

Entwickler haben die Flexibilität, das neue Verhalten anzugeben Geben Sie 0 zurück, anstatt eine Ausnahme auszulösen, indem Sie den Parameter std::nothrow verwenden:

SomeType *p = new(std::nothrow) SomeType;

Diese Technik ermöglicht a konsistenter Ansatz für alle Compiler und vereinfacht die Codewartung, da keine Änderung bestehender Fehlerbehandlungsmechanismen erforderlich ist.

Das obige ist der detaillierte Inhalt vonWarum gibt „new' manchmal NULL zurück, anstatt eine Ausnahme auszulösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn