Sollen Ausnahmen in C ++ verkettet werden? [Duplikat

Diese Frage hat hier bereits eine Antwort:

Richtige / elegante Art der Implementierung von C ++ - Ausnahmeketten? 4 AntwortenSo simulieren Sie eine innere Ausnahme in C ++ 6 answers

Ich habe gerade die Arbeit an einem C ++ - Programm beendet, in dem ich meine eigenen Ausnahmen implementiert habe (obwohl sie von std :: exception abgeleitet sind). Die Praxis, die ich angewendet habe, wenn eine Ausnahme eine Kettenreaktion hervorruft, den Fehler nach oben propagiert und andere Ausnahmen hervorruft, besteht darin, die Fehlermeldung bei jedem geeigneten Schritt über die Module hinweg zu verketten (Klassen lesen). Das heißt Die alte Ausnahme selbst wird gelöscht und eine neue Ausnahme erstellt, jedoch mit einer längeren Fehlermeldung.

Dies hat vielleicht für mein kleines Programm funktioniert, aber ich war am Ende nicht sehr zufrieden mit meinem Ansatz. Zum einen werden Zeilennummern (obwohl sie momentan nicht angewendet werden) und Dateinamen mit Ausnahme der letzten Ausnahme nicht beibehalten. und wirklich, diese Information ist in der ersten Ausnahme von größtem Interesse.

Ich glaube, dies hätte besser gehandhabt werden können, wenn Ausnahmen miteinander verkettet worden wären. die alte Ausnahme wird im Konstruktor der neuen Ausnahme bereitgestellt. Aber wie würde das umgesetzt werden? Sterben nicht Ausnahmen, wenn sie aus dem Gültigkeitsbereich der Methode herausfallen, wodurch verhindert wird, dass man Ausnahmenzeiger verwendet? Und wie kann die Ausnahme kopiert und gespeichert werden, wenn die Ausnahme von einer abgeleiteten Klasse stammen kann?

Dies veranlasste mich letztendlich zu überlegen, ob das Verketten von Ausnahmen in C ++ immerhin eine so gute Idee ist. Vielleicht sollte man nur eine Ausnahme erstellen und dann zusätzliche Daten hinzufügen (wie ich es getan habe, aber wahrscheinlich viel besser)?

Wie antworten Sie darauf? Sollten von einem anderen verursachte Ausnahmen verkettet werden, um eine Art "Ausnahmeverfolgung" beizubehalten - und wie sollte dies implementiert werden? - oder soll eine einzige Ausnahme verwendet und zusätzliche Daten angehängt werden - und wie soll das gemacht werden?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage