为什么 C++不提供“finally”的构造?


  
因为 C++提供了另外一种方法,它几乎总是更好的:“资源获得即初始化”(resource 
acquisiton is initialization)技术。基本的思路是,通过一个局部对象来表现资
源,于是局部对象的析构函数将会释放资源。这样,程序员就不会忘记释放资源了。举例来
说: 
  
    class File_handle { 
        FILE* p; 
    public: 
        File_handle(const char* n, const char* a) 
            { p = fopen(n,a); if (p==0) throw Open_error(errno); } 
        File_handle(FILE* pp) 
            { p = pp; if (p==0) throw Open_error(errno); } 
  
        ~File_handle() { fclose(p); } 
  
        operator FILE*() { return p; } 
  
        // ... 
    }; 
  
    void f(const char* fn) 
    { 
        File_handle f(fn,"rw"); //打开fn进行读写 
        // 通过f 使用文件 
    } 
  
在一个系统中,需要为每一个资源都使用一个“资源句柄”类。无论如何,我们不需要为每
一个资源获得都写出“finally”语句。在实时系统中,资源获得要远远多于资源的种类,
因此和使用“finally”构造相比,“资源获得即初始化”技术会产生少得多的代码。

posted on 2007-03-24 09:52 阿刚 阅读(1473) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

常用链接

留言簿(1)

随笔档案

文章档案

C++ BBS

C++ FAQ

C++ WEBSITE

搜索

最新随笔

最新评论

阅读排行榜

评论排行榜