WEB开发网
开发学院软件开发C语言 RAII 阅读

RAII

 2009-06-08 08:32:23 来源:WEB开发网   
核心提示: 我们可以看到,在对象存在的时候,RAII(4),文件资源总是有效的,因为我们无需判断指针 p 是否合法,代码将非常脆弱 p = NULL; } ~File_handle() {} void Open(const char* pp, const char* r) { // 必须判断,是否调用

我们可以看到,在对象存在的时候,文件资源总是有效的,因为我们无需判断指针 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();
        }
    }
};

上一页  1 2 3 4 5  下一页

Tags:RAII

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接