异常处理机制给程序在运行时出现错误,提供了一个处理、恢复错误的能力,提高了程序的健壮性。
我们也可以利用异常处理机制保证资源的释放:如下
void f(const char* p)
{
FILE* f = 0;
try
{
f = fopen(p,”r”);
// use f
}
catch (…) { // handle exception
// …
}
if (f) fclose(f);
}
如果以上形式并不能完全处理异常,可以将异常重新抛出,通知
上级程序继续处理。如:
void f(const char* p)
{
FILE* f = 0;
try
{
f = fopen(p,”r”);
// use f
}
catch (…) { // handle exception
// …
if (f) fclose(f);
throw;
}
if (f) fclose(f);
}
另外也可以将资源的申请、释放封装在构造函数和析构函数中,或者使用auto_ptr。