catch

From RAD Studio
Jump to: navigation, search

Go Up to Keywords, Alphabetical Listing Index


Category

Statements, C++ Specific Keywords

Syntax

catch (exception-declaration) compound-statement

Description


Used for exception handling tehniques,the catch keyword marks an exception handling code block. The specific exception being handled by the said code block is determined by the type of exception given as the exception-declaration. The exception declaration can be a pointer to a class derived from the Exception base class, a simple type, a structured type, or the ... notation.

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

For all the types specified above excepting the one with... notation, a name for the caught object can be given, in order to be used in the catch code block.

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

Any VCL object can be used as an exception and after the catch code block has finished, the destructor is automatically envoked for the caught object. The following code will show the destructor message.

Each handler will only evaluate an exception that matches, or can be converted to, the type specified in its argument list, except the ... that catches all exceptions.

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

Multiple catch code blocks can be used for the same try. The catch code blocks are being registered by the compiler in the order they are declared. For example:

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

When multiple catch blocks are being used and a ... block is present, this one must be the last one. The compiler issues an error, but if it wouldn't, the catch code blocks after the ... one would never be called therefore making them useless.

The keyword <keyword>catch</keyword> can only be used in C++ programs, use __try - __except or __try - __finally in C.

Personal tools
Newest Version: XE
In other languages