使用一种强制的机制保证一些致命错误能够被处理是一个明智的选择。比如说内存错,文件错等等。
在C++中引入了一种在C语言中不存在的特性,错误捕捉机制(try/catch),这是一种强制性的机制,如果程序中抛出的异常未被成功捕捉,该异常将一直会沿着函数调用的顺序上升,直到被捕捉到为止。而默认的main函数之外存在有异常捕捉代码,这段默认的异常捕捉代码将会终止程序并报告异常的发生。
catch(...)将会捕捉所有未指明类型的异常。在这里我们可以看到异常是可以分为很多类的,而分类的依据就是抛出异常时候所使用的数据类型。
抛出异常的语法很简单,使用关键字throw就可以了,后面跟异常常的类型。如果单独使用throw则表示继续抛出当前异常,这种用法表明在处理当前异常后继续将该异常传递给其他的异常处理块进行处理。
在MFC中定义了一些专门用于处理异常的类,所有这些类都由CException派生,并各自负责不同的异常情况,在MFC内部出现异常并抛出异常时将会抛出以下异常类:
类 用途
CException 异常基类
CNotSupportedException 进行系统不支持的操作时抛出的异常类
CMemoryException 内存分配失败时抛出的异常类
CArchiveException 文件串行化失败时抛出的异常类
CFileException 文件读写错误时抛出的异常类
CResourceException 资源无法装入时抛出的异常类
COleException OLE发生异常时抛出的异常类
CInternetException 使用WinInet功能时抛出的异常类
CUserException 用户定义的异常类
例:
CHttpFile* pHttpFile;
.................
try{
pHttpFile->SendRequest();
.....
}
..........
catch( CInternetException *e ){
e->Delete();
....
}
..............