感悟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
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
相关文章推荐
- C++ 引用计数技术及智能指针的简单实现
- cocos2dx-内存管理剖析(智能指针的局限与引用计数的选择)
- OSG中引用计数与智能指针实现原理
- 一种基于引用计数机制的智能指针实现
- C++引用计数技术及智能指针的简单实现
- C++ 引用计数技术及智能指针的简单实现
- boost库在工作(8)引用计数的智能指针shared_ptr之一
- boost库在工作(9)引用计数的智能指针shared_ptr之二
- boost库在工作(10)引用计数的智能指针shared_array
- MOOC清华《面向对象程序设计》第8章:智能指针与引用计数实验
- 智能指针的实现--使用引用计数实现以及原理
- C++应用系列:用智能指针shared_ptr中引用计数思想进行动态内存管理
- C++ 引用计数技术及智能指针的简单实现
- C++ 引用计数技术及智能指针的简单实现
- 有效的使用和设计COM智能指针——条款2:引用计数的是与非
- boost库在工作(8)引用计数的智能指针shared_ptr之一
- VTK修炼之道80:VTK开发基础_智能指针与引用计数
- C++ 引用计数技术及智能指针的简单实现
- 引用计数我不怕之智能指针
- c++11-智能指针和引用计数