之前一直有用到智能指针,但一直没有真正去了解其内部的实现,并且之前用到的很多智能指针实现方式是经过封装过的,如Comptr这类。今天在研究chromium中的代码是看到了其自定义的WeakPtr的实现,感觉自己对这部分知识不甚了解,趁着这个机会,好好把跟智能指针相关的知识理清楚。在这篇文章会重点讲讲boost标准库和chromium中一些定义及使用。
首先,还是在boost中查看相关智能指针的实现,在C++中为了更好的管理内存,特别是管理那些动态分配且被多个对象拥有的对象,boost提出了一套智能指针(smart pointers)的标准。
boost中提出了6种智能指针的使用方式,下面表格中的内容是从官方文档中抠出来的,可以事先做一个简单的了解。
scoped_ptr | <boost/scoped_ptr.hpp> | 单个对象的唯一的一个拥有者,不可复制。 |
scoped_array | <boost/scoped_array.hpp> | 数组对象的唯一的一个拥有者,不可复制。 |
shared_ptr | <boost/shared_ptr.hpp> | 多个指针共享单个对象。 |
shared_array | <boost/shared_array.hpp> |
多个指针共享一个数组对象。
|
weak_ptr | <boost/weak_ptr.hpp> | 一个被shared_ptr所拥有的对象的观察者(不拥有它)。 |
intrusive_ptr |