Versuch, Erfassung und throw-Anweisungen (C++)

C++-Ausnahmen verwenden die Try, Catch und Wurfs Schlüsselwörter.

Signalisiert einem Wurfs mit der Fehler oder die Ausnahme kann.Sie können ein Objekt beliebigen Typs als Operand eines Ausdrucks für Wurfs verwenden.Dieses Objekt wird normalerweise verwendet, um Informationen über den Fehler zu übermitteln.In der Regel sollten Sie die std verwenden::Ausnahmeklasse oder eine der abgeleiteten Klassen, die in der Default Library definiert sind oder wenn keine von denen geeignet sind, besitzen Exception-Klasse abgeleitet: std aus: Ausnahme.

Ein try-Block legt eine oder mehrere Anweisungen gewährleistet, die eventuell eine Ausnahme ausgelöst hat.

Eine oder mehrere catch-Blöcke sofort nach einem try-Block.Jeder catch-Block gibt den Typ der Ausnahme an, die er verarbeiten kann.

Die folgende Syntax zeigt ein Beispiel try-Block und die dazugehörigen Handler an.Angenommen, GetNetworkResource() Daten über ein Netzwerk her und dass die beiden Ausnahmetypen benutzerdefinierte Klassen, die von std::Ausnahme Hinweis berechnen, dass die Ausnahmen als Verweis in der catch-Anweisung übergeben werden:

MyData md;
try {
   // code that could throw an exception
   md = GetNetworkResource();
}
catch (networkIOException& e) {
   // code that executes when an exception of type
  // networkIOException is thrown in the try block
//…
// Log error message in the exception object.
   cerr << e.what();
}
catch (myDataFormatException& e) {
   // code that handles another exception type
//…
 cerr << e.what();

}

// The following syntax shows a throw expression:

MyData GetNetworkResource()
{
    //...
    if(IOSuccess == false)
        throw networkIOException("Unable to connect");
    //...
    if(readError)
        throw myDataFormatException("Format error"); 
    // ...
}

Hinweise

Der Code nach der try-Klausel ist der abgesicherte Codeabschnitt.Der Ausdruck wird Wurfs () löst eine Ausnahme aus.Der Codeblock, nachdem die catch-Klausel der Ausnahmehandler ist und fängt (Handles) die Ausnahme ab, die durch den Ausdruck Wurfs ausgelöst wird, wenn der Typ in den Wurfs- und Erfassungs ausdrücken kompatibel sind.Eine Liste von Regeln, die TYPE-übereinstimmendes in catch-Blöcken steuern, finden Sie unter ___.Wenn die catch-Anweisung Auslassungszeichen (...) anstelle eines Typs angegeben wird, behandelt der Block catch jeden Typ von Ausnahme, einschließlich C-Ausnahmen und wie Ausnahmen anwendungsgenerierte System oder Speicherschutz, Division durch null und float Verletzungen.Da catch-Blöcke in der Reihenfolge Programm versucht werden, muss ein solches Handler der letzte Handler für den try-Block sein.Verwenden Sie catch (…) mit Vorsicht. In der Regel wird ein solches catch-Block verwendet, um Fehler zu protokollieren und jedes spezielle Bereinigung vor dem Beenden der Programmausführung auszuführen.Lassen Sie nicht zu einem Programm fortgesetzt werden kann, solange der catch-Block die spezifische Ausnahme behandeln kann, die abgefangen wird.

Ein Ausdruck THROW Operanden ohne erneutes löst die Ausnahme aus, die gerade verarbeitet wird.Ein solcher Ausdruck sollte nur in einem catch-Handler oder in einer Funktion vorhanden sind, die aus einem catch-Handler aufgerufen wird.Das erneut, nicht verknüpften Ausnahmeobjekt ist das ursprüngliche Ausnahmeobjekt (keine Kopie).Beispiele:

try {
   throw CSomeOtherException();
}
catch(...) {  // Catch all exceptions – dangerous!!!
   // Respond (perhaps only partially) to exception
   throw;       // Pass exception to some other handler
}

Siehe auch

Referenz

C++-Ausnahmebehandlung

C++-Schlüsselwörter

Nicht behandelte C++-Ausnahmen

__uncaught_exception

Weitere Ressourcen

Gewusst wie: Behandeln von Ausnahmen in den Basisklassen-Konstruktoren (C++)