Heim > Artikel > Backend-Entwicklung > Warum können C-Destruktoren mit „std::nested_Exception“ keine Ausnahmen auslösen?
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!