|Important||This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer|
class AFX_NOVTABLE CException : public CObject
CException is the base class for all exceptions in the Microsoft Foundation Class Library. Because CException is an abstract base class you cannot create CException objects directly; you must create objects of derived classes. If you need to create your own CException-style class, use one of the derived classes listed above as a model. Make sure that your derived class also uses IMPLEMENT_DYNAMIC.
The derived classes and their descriptions are listed below:
|CSimpleException||A base class for resource-critical MFC exceptions|
|CInvalidArgException||Invalid argument exception condition|
|CNotSupportedException||Request for an unsupported operation|
|CResourceException||Windows resource not found or not createable|
|CDBException||Database exception (that is, exception conditions arising for MFC database classes based on Open Database Connectivity)|
|COleDispatchException||OLE dispatch (automation) exception|
|CUserException||Exception that indicates that a resource could not be found|
|CDaoException||Data access object exception (that is, exception conditions arising for DAO classes)|
|CInternetException||Internet exception (that is, exception conditions arising for Internet classes).|
These exceptions are intended to be used with the THROW, THROW_LAST, TRY, CATCH, AND_CATCH, and END_CATCH macros. For more information on exceptions, see Exception Processing, or see the article Exception Handling (MFC).
To catch a specific exception, use the appropriate derived class. To catch all types of exceptions, use CException, and then use CObject::IsKindOf to differentiate among CException-derived classes. Note that CObject::IsKindOf works only for classes declared with the IMPLEMENT_DYNAMIC macro, in order to take advantage of dynamic type checking. Any CException-derived class that you create should use the IMPLEMENT_DYNAMIC macro, too.
If an exception is caught by one of the macros, the CException object is deleted automatically; do not delete it yourself. If an exception is caught by using a catch keyword, it is not automatically deleted. See the article Exception Handling (MFC) for more information about when to delete an exeption object.