在MFC库中由CFile抛出的可能异常

时间:2015-05-21 10:05:16

标签: c++

目前,我正在调查一些使用MFC库中的CFile类来打开文本文件的代码。

我在代码中发现了两种错误处理:这只是样本,因为发布代码是保密的。只要认为try语句的主体只包含CFile类的成员函数。

1

try {
     if(file.Open(strPath,Cfile::modeRead|CFile::shareDenyNone)){
     file.Read(strKey, dataLength);
     file.Close();

   }
}
catch (CFileException& e) {
}

2

try {
    // same code above
}
catch (CFileException *e) {
}
  1. 这两种异常处理有什么区别?
  2. CFile类的成员函数可以抛出哪些错误?
  3. 不是。有哪种方法可以捕获CFile类的成员函数抛出的异常?

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式抛出异常对象:

CException ex;
throw ex; // CException 

或通过指针:

CException *ex = new CException();
throw ex; // CException *

捕获异常时,会捕获相应类型的抛出内容,即指针或值。为避免副本,我们通常使用引用按值进行追踪:

catch(CException &e) // when throwing CException

MFC通过指针抛出异常;见https://msdn.microsoft.com/en-us/library/0e5twxsh.aspx

try {
   AfxThrowUserException();
}
catch( CException* e ) {
   e->Delete();
}

不要忘记之后删除异常,否则每次抛出异常都会导致内存泄漏。