异常:捕获和删除异常
下面的说明和示例演示如何捕获和删除异常。 有关 try的更多信息, catch和 throw 关键字,请参见 C++ 异常处理。
您的异常处理程序必须删除异常对象,它们处理,因为无法删除异常会导致内存泄漏,只要该代码捕获异常。
您的 catch 块必须删除异常,则:
catch 块引发新异常。
当然,因此,如果您再次引发,同一异常不能删除异常:
catch(CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }
执行返回从 catch 的内部块。
备注
在删除 CException时,请使用 删除 成员函数删除异常。不要使用关键字, delete ,因为它可能失败,则异常不能在堆。
捕获和删除异常
使用 try 关键字设置 try 块。 执行可能引发异常。 try 中的异常块的所有过程语句。
使用 catch 关键字设置 catch 块。 将异常处理代码在 catch 块。 在 catch 的代码块执行,仅当在 try 中的代码块该类型的异常。 catch 语句中指定的引发。
下列主干显示 try 和 catch 块如何通常是位置:
try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch( CException* e ) { // Handle the exception here. // "e" contains information about the exception. e->Delete(); }
引发异常时,对异常声明与异常类型的第一 catch 的控件通过阻塞。 您可以有选择地将异常的不同类型与顺序 catch 的块如下面所列的处理:
try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch( CMemoryException* e ) { // Handle the out-of-memory exception here. e->Delete(); } catch( CFileException* e ) { // Handle the file exceptions here. e->Delete(); } catch( CException* e ) { // Handle all other types of exceptions here. e->Delete(); }
有关更多信息,请参见 异常:将 MFC 异常宏。