catch

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Kategorie

Anweisungen, C++-spezifische Schlüsselwörter

Syntax

catch (exception-declaration) compound-statement

Beschreibung


Das Schlüsselwort catch wird in Exception-Behandlungstechniken verwendet und kennzeichnet einen Exception-Behandlungscodeblock. Die jeweilige Exception, die von diesem Codeblock behandelt wird, ist durch den in der Exception-Deklaration angegebenen Typ der Exception festgelegt. Die Exception-Deklaration kann ein Zeiger auf eine von der Basisklasse Exception abgeleitete Klasse, ein einfacher Typ, ein strukturierter Typ oder die Notation ... sein.

try {
  throw 1;
} catch (int) {
  ShowMessage("int caught");
}

Für alle oben genannten Typen, außer der Notation ..., kann ein Name für das abgefangene Objekt angegeben werden, der im catch-Block verwendet werden soll.

try {
 throw 1;
} catch (int x) {
ShowMessage("int " + IntToStr(x) + " caught");
}

Als Exception kann ein beliebiges VCL-Objekt verwendet werden und nach Beendigung des catch-Codeblocks wird der Destruktor automatisch für das abgefangene Objekt aufgerufen. Der folgende Code zeigt die Destruktormeldung.

Jede Behandlungsroutine wertet nur eine Exception aus, die mit dem in ihrer Argumentliste spezifizierten Typ übereinstimmt oder in diesen konvertiert werden kann. Dies gilt nicht für die Notation ..., die alle Exceptions abfängt.

class MException : public TObject {
 virtual __fastcall ~MException(){ ShowMessage("destructor"); }
};
 
//somewhere in the code
try {
 throw new MException;
} catch (MException*) {
}

Mehrere catch-Codeblöcke können für dieselbe try-Anweisung verwendet werden. Die catch-Codeblöcke werden vom Compiler in der Reihenfolge registriert, in der sie deklariert sind. Zum Beispiel:

try {
 throw "exception";
} catch (const char*) {
    ShowMessage("string caught");
} catch (...){
    ShowMessage("anything caught"); 
}

Wenn mehrere catch-Blöcke verwendet werden und ein ... Block vorhanden ist, muss dieser der letzte sein. Ist dies nicht der Fall, gibt der Compiler einen Fehler aus, weil die catch-Codeblöcke nach dem ... Block nie aufgerufen würden und daher nutzlos wären.

Das Schlüsselwort catch kann nur in C++-Programmen verwendet werden; benutzen Sie in C __try - __except oder __try - __finally.