Was macht ein single "throw;" - Anweisung zu tun?

Diese Tage, ich habe viel gelesen das C++ - F. A. Q und vor allem auf dieser Seite.

Lesen Sie den Abschnitt entdeckte ich eine "Technik", die der Autor fordert, "exception dispatcher", die erlaubt, dass jemand alle seine exception handling in einer praktischen Funktion:

void handleException()
{
  try {
    throw; //?!
  }
  catch (MyException& e) {
    //...code to handle MyException...
  }
  catch (YourException& e) {
    //...code to handle YourException...
  }
}

void f()
{
  try {
    //...something that might throw...
  }
  catch (...) {
    handleException();
  }
}

Was mich stört ist das einzige throw; Aussage: wenn man bedenkt das gegebene Beispiel dann sicher, ist es offensichtlich, was es tut: es rethrows die exception gefangen in f() ist und sich mit es wieder.

Aber was ist, wenn ich Anruf handleException() auf seine eigene, direkt, ohne es von einem catch() - Klausel ? Gibt es eine spezifizierte Verhalten ?

Zusätzlich für bonus-Punkte, gibt es noch andere "verrückte" (wahrscheinlich nicht das gute Wort) Verwendung von throw, die Sie kennen ?

Danke.

  • Hast du gelesen das auf deiner verlinkten Seite? parashift.com/c++-faq-lite/Ausnahmen.html#faq-17.15 'In diesem Beispiel wird die Anweisung throw; bedeutet "re-werfen Sie die aktuelle exception."'
  • Larson: Absolut. Aber in dem Fall, wo es keine "aktuellen" Ausnahme, was passiert ?
  • Ich fand die Antwort, aber @dalle, mich zu schlagen.
InformationsquelleAutor ereOn | 2011-03-21
Schreibe einen Kommentar