Heim > Backend-Entwicklung > C++ > Wirft „new' in C immer „std::bad_alloc'?

Wirft „new' in C immer „std::bad_alloc'?

Barbara Streisand
Freigeben: 2024-11-17 08:50:03
Original
625 Leute haben es durchsucht

Does `new` Always Throw `std::bad_alloc` in C  ?

Wahre Ausnahmen: Über die Norm in der C-Speicherverwaltung hinaus

Im Gegensatz zum C-Standard wurde berichtet, dass einige Compiler, wie z VC6 weicht vom erwarteten Verhalten der Rückgabe von std::bad_alloc-Ausnahmen ab, wenn new keinen Speicher zuordnen kann.

Wenn new den angeforderten Speicher nicht abrufen kann, wird normalerweise eine std::bad_alloc-Ausnahme ausgelöst, die sich an die etablierte hält C-Standards. Im Fall von VC6 wurde jedoch ein alternativer Ansatz gewählt.

Anstatt eine Ausnahme zurückzugeben, gab VC6 Berichten zufolge bei einem Speicherzuweisungsfehler 0 (oder NULL) zurück. Dieses vom Standard abweichende Verhalten könnte zu Verwirrung und unerwarteten Ergebnissen im Code führen.

Um das Problem zu bekämpfen, hat Microsoft einen benutzerdefinierten neuen Handler als empfohlene Lösung eingeführt. In Visual C 7.0 und 7.1 (VS2002 und VS2003) wurde jedoch durch ein komplexes Regelwerk bestimmt, ob sich „new“ nicht werfend oder werfend verhält.

Mit der Veröffentlichung von Visual C 8.0 (VS2005) Microsoft hat das Problem durch die Durchsetzung einer einheitlichen Richtlinie gelöst. In dieser Version würde new standardmäßig immer eine Ausnahme auslösen, sofern nicht explizit mit der Objektdatei nothrownew.obj verknüpft.

Für Entwickler, die mit älterem Code arbeiten, der für VC6 entwickelt wurde, kann der Parameter std::nothrow verwendet werden ahmen Sie das Verhalten von new in diesem Compiler nach. Durch die Angabe von new(std::nothrow) kann der Code mechanisch geändert werden, um auf verschiedenen Compilern ähnlich zu funktionieren, wodurch die Notwendigkeit entfällt, bestehende Fehlerbehandlungsmechanismen zu überarbeiten.

Das obige ist der detaillierte Inhalt vonWirft „new' in C immer „std::bad_alloc'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage