Home | Overview | How Do I | FAQ
The following instructions and examples show you how to catch and delete exceptions. For more information on the try, catch, and throw keywords, see Exception Handling Topics (C++).
Your exception handlers must delete exception objects they handle, because failure to delete the exception causes a memory leak whenever that code catches an exception.
Your catch block must delete an exception when:
Of course, you must not delete the exception if you throw the same exception again:
catch(CException* e)
{
if (m_bThrowExceptionAgain)
throw; // Do not delete e
}
Note When deleting a CException, use the Delete member function to delete the exception. Do not use the delete keyword, because it can fail if the exception is not on the heap.
To catch and delete exceptions
Use the catch keyword to set up a catch block. Place exception-handling code in a catch block. The code in the catch block is executed only if the code within the try block throws an exception of the type specified in the catch statement.
The following skeleton shows how try and catch blocks are normally arranged:
// Normal program statements
...
try
{
// Execute some code that might throw an exception.
}
catch( CException* e )
{
// Handle the exception here.
// "e" contains information about the exception.
e->Delete();
}
// Other normal program statements
...
When an exception is thrown, control passes to the first catch block whose exception-declaration matches the type of the exception. You can selectively handle different types of exceptions with sequential catch blocks as listed below:
try
{
// Execute some code that might throw an exception.
}
catch( CMemoryException* e )
{
// Handle the out-of-memory exception here.
}
catch( CFileException* e )
{
// Handle the file exceptions here.
}
catch( CException* e )
{
// Handle all other types of exceptions here.
}
For related information, see Exceptions: Converting from MFC Exception Macros.