Richtig beenden das Programm. Mit Ausnahmen

Frage: Ist mit Ausnahmen der richtige Weg, um zu beenden mein Programm, wenn ich will eine Fehlermeldung angezeigt, und in der Nähe (Buchhaltung, die ich kann tief in das Programm)? Kann ich nur ausdrücklich nennen so etwas wie exit() statt?

, Was ich bin Derzeit Dabei:

Arbeite ich an einem Spiel-Projekt, und ich versuche, herauszufinden, der beste Weg, um das Programm zu beenden im Falle eines Fehlers, die Anrufe für eine solche Aktion. Zum Beispiel, in dem Fall die Texturen können nicht geladen werden ich eine Fehlermeldung angezeigt, und beenden Sie das Programm.

Ich bin derzeit dabei, dies mit Ausnahmen, etwa so:

int main()
{
   Game game;
   try
   {
       game.run();
   }
   catch (BadResolutionException & e)
   {
       Notification::showErrorMessage(e.what(), "ERROR: Resolution");
       return 1;
   }
   catch (BadAssetException & e)
   {
       Notification::showErrorMessage(e.what(), "ERROR: Assets");
       return 1;
   }
   catch (std::bad_alloc & e)
   {
       Notification::showErrorMessage(e.what(), "ERROR: Memory");
       return 1;
   }
   return 0;
}

Alle, aber bad_alloc sind meine selbst definierte exceptions abgeleitet von runtime_error.

Ich brauche keine manuelle ressourcenfreigabe und ich bin mit std::unique_ptr für alle dynamischen Zuweisung. Ich brauche nur um die Anzeige der Fehlermeldung und schließen Sie das Programm.

Forschung/Alternativen zu den Ausnahmen:

Ich habe mir eine Menge Beiträge zu SO und anderen stellen gesehen haben, die anderen sagen nichts von nicht, Ausnahmen, Ausnahmen aber Ihre mithilfe Sie falsch. Ich habe auch nachgeschaut ausdrücklich etwas rufen wie exit().

Mit exit() klingt nett, aber ich lese es nicht, gehe zurück durch den call-stack bis zur Hauptreinigung alles (wenn ich finden kann, diese wieder poste ich den link). Zusätzlich, nach http://www.cplusplus.com/reference/cstdlib/exit/ dies sollte nicht verwendet werden, wenn mehrere threads aktiv sind. Ich erwarte zu erstellen, einen zweiten thread für eine kurze Zeit zumindest einmal, und ein Fehler konnte auftreten in diesem thread.

Nicht mit Ausnahmen erwähnt wurde in einigen Antworten hier in Bezug auf Spiele https://gamedev.stackexchange.com/questions/103285/how-industy-games-handle-their-code-errors-and-exceptions

Ausnahmen wurde hier diskutiert: http://www.quora.com/Why-do-some-people-recommend-not-using-exception-handling-in-C++

Gibt es eine Reihe von anderen Quellen, die ich gelesen habe aber das waren die letzten, die ich sah.

Persönliches Fazit:

Aufgrund meiner begrenzten Erfahrung in der Arbeit mit Fehlerbehandlung und-mit Ausnahmen, ich bin mir nicht sicher, ob ich auf dem richtigen Weg. Ich habe mich entschlossen die Strecke mit Ausnahmen basierend auf dem code, den ich oben gepostet. Wenn Sie einverstanden sind, dass ich angehen sollte jenen Fällen, mit Ausnahmen, verwende ich es richtig?

  • Look at std::exit, bevor Sie viel Zeit verbringen Sie auf beenden. Es macht einen besseren job, von sauber bis in eine RAII Welt.
  • Inwiefern macht es einen besseren job? Es schadet auch nicht, entspannen Sie den Stapel...
  • Gut, auch wenn Sie nicht es zu erwähnen, sollten Sie nicht rufen Sie exit() in der Mitte der Klasse oder die Bibliothek-code. stackoverflow.com/questions/22843189/... Also, wenn Sie denken, etwas wie das, nicht.
  • Nachdem Sie eine Bibliothek an: Niemals etwas beenden des Programms, es sei denn, es ist schwerer. Ähnliches gilt für eine eigenständige ausführbare Datei.
  • Jeder Zeit gibt es eine Frage, Wann Ausnahmen es zwangsläufig geschlossen ist. Es ist eine legitime Frage. Aufhören zu versuchen, diese zu schließen!
  • Nein ist es nicht, aber beenden tut süßer Kerl, der alle, so dass immer die Statik und Faden einheimischen gesäubert ist eine große Verbesserung.

Schreibe einen Kommentar