您的位置:首页 > 大数据 > 人工智能

感悟3:智能指针 = 引用计数 + RAII

2007-11-01 00:46 429 查看
auto_ptr的一个重要思想是RAII.RAII是"Resource Acquisition Is Initialisation"的简称,有人把它翻译成"资源获取即初始化",但我更喜欢用理解的方式把RAII看成是利用对象的生命周期管理资源。RAII思想不只是局限于C++语言,但毫无疑问它跟C++是绝配。
RAII这一思想,特别是运用在C++语言上,不仅实用、简单,而且高效。把资源的管理交给了特定的资源管理对象,这就把资源的管理局部化在资源管理对象上。资源管理对象主要利用了对象的生命周期达到了自我管理,使得实现极其简单。效率方面,在C++中资源管理对象的所有操作几乎都可以inline化,操作效率丝毫无损。相反,如果不使用RAII,在资源释放的时候可能还会有很多判断语句,不仅代码难看,效率也可能更低。
RAII在C++的使用中,最为引人注目的可能就是auto_ptr了。C++之父在TCPL描述auto_ptr之前,也先介绍了RAII。这也是他在TCPL中的贯用手法--先描述出现某一事物的理由或思想然后再描述事物本身。不过C++之父在描述RAII时,过于关注跟exception的结合使用,可能会使RAII不易引起人的注意。相反Scott Meyers大师却拿着放大镜看RAII,在他的Effective系列中用了好几个条款描述RAII的思想和使用。其间的描述使人兴奋,令人叹服,在描述C++使用RAII方面,应该是无出其右者。
如果把眼界放得更开的话,RAII或许不仅仅用于资源管理,比如可以用资源管理对象来监视资源的获取/释放。根据具体情况需要,或许可能有更多类似的变了形式的使用。怎样使用,那真是美妙之极,古语有云:运用之妙,存乎一心。

有感于auto_ptr背后的一个思想----RAII
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: