第一个例子:
void f()
{
FILE* __f;
__f=fopen(“filename”,”r+”);
if ( __f)
{
// file use ①
fclose(__f); //② 关闭文件
}
}
如果在//①file use过程中出现了错误,抛出了异常,程序就会异常回退,不会执行到②,文件也就没有关闭。解决这类问题可以使用异常处理:
void f()
{
FILE* __f;
__f=fopen(“filename”,”r+”);
if(__f)
{
try
{
// file use ①
}
catch(...)
{
fclose(__f); //② 关闭文件
throw; // 重新抛出异常
}
fclose(__f);//② 关闭文件
}
}
这种方案的缺点:
1.影响性能
2.背离异常设计的原则,异常处理代码和正常的代码没有很好的分离。只不过是:
if(error)
{
//错误处理
}
的偷