RAII
2009-06-08 08:32:23 来源:WEB开发网我们可以看到,在对象存在的时候,文件资源总是有效的,因为我们无需判断指针 p 是否合法,这简化了编程,使得代码更加优雅。相比之下,这样实现就不那么美观:
class File_handle
{
FILE* p;
public:
File_handle()
{
// 必须初始化为 NULL,否则下面的所有检查将无效,代码将非常脆弱
p = NULL;
}
~File_handle() {}
void Open(const char* pp, const char* r)
{
// 必须判断,是否调用两次 Open
if (p == NULL)
{
p = fopen(pp,r);
if (p==0)
throw Cannot_open(pp);
}
else
{
throw Close_first();
}
}
void Close()
{
if (p != NULL)
{
fclose(p);
// 必须置空,否则程序其他地方判断将失效
p == NULL;
}
else
{
throw Open_first();
}
}
int GetChar()
{
// 类似于 GetChar 的函数都需要判断,否则在调用 Open 之前调用程序将出错
if (p != NULL)
{
return fgetc(p);
}
else
{
throw Open_first();
}
}
};
- ››RAII
更多精彩
赞助商链接