Heim  >  Artikel  >  Backend-Entwicklung  >  Warum können C-Destruktoren mit „std::nested_Exception“ keine Ausnahmen auslösen?

Warum können C-Destruktoren mit „std::nested_Exception“ keine Ausnahmen auslösen?

DDD
DDDOriginal
2024-11-03 20:40:29856Durchsuche

Why Can't C   Destructors Throw Exceptions with `std::nested_exception`?

Warum verwendet C nicht std::nested_Exception, um das Werfen vom Destruktor zu ermöglichen?

Der Hauptgrund für die Nichtverwendung von std::nested_Exception Das Auslösen von Ausnahmen von Destruktoren zu erleichtern, liegt in der möglichen Mehrdeutigkeit, wenn eine andere Ausnahme „im Flug“ ist. Wenn während der Destruktorausführung bereits eine Ausnahme aktiv ist, ist unklar, wie mit der Situation umgegangen werden soll. Das Überschreiben der bestehenden Ausnahme durch die neue stellt eine mögliche Lösung dar, aber der Konsens innerhalb der C-Community befürwortete stattdessen den Aufruf von std::terminate oder eines benutzerdefinierten std::terminate_handler.

Untersuchung verschachtelter Ausnahmen

Obwohl die Idee der Verwendung verschachtelter Ausnahmen in Betracht gezogen wurde, könnten potenzielle Implementierungsprobleme ihre Einführung behindert haben. Insbesondere Bedenken hinsichtlich möglicher Leistungseinbußen und erhöhter Komplexität bei der Ausnahmebehandlung könnten bei der Entscheidung, den aktuellen Ansatz beizubehalten, eine Rolle gespielt haben.

Zukünftige Entwicklungen

Ab C 17 bleibt die Haltung zum Zulassen des Auslösens von Ausnahmen durch Destruktoren mithilfe verschachtelter Ausnahmen unverändert. Zukünftige Versionen von C werden dieses Konzept jedoch möglicherweise überdenken und alternative Lösungen einführen, um das Problem von Ausnahmen bei der Objektzerstörung zu lösen.

Das obige ist der detaillierte Inhalt vonWarum können C-Destruktoren mit „std::nested_Exception“ keine Ausnahmen auslö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