boost主要是通过六种智能指针来管理内存的:scoped_ptr scoped_array shared_ptr shared_array weak_ptr intrusive_ptr。他们都是轻量级的对象,速度与原始指针相差无几,对于所指的类型T也仅有一个很小且很合理的要求:类型T的析构函数不能抛出异常。
scoped_ptr:仅仅提供了*和->操作,且赋值操作符和拷贝构造函数被定义为私有的,有效的防止了指针所有权的转让。 ==和!=操作符被私有化,拒绝比较操作。
scoped_array:包装了new[]操作符在堆上分配的动态数组,弥补了标准库中没有指向数组的智能指针的缺憾。在需要动态数组的情况下我们因该使用std::vector,它比scoped_array提供了更多的灵活性。除非对性能有非常苛刻的要求,或者编译器不支持标准库,否则不推荐使用scoped_array。
shared_ptr:实现的是引用计数型智能指针,可以安全的放到标准容器中。可以定制删除器,删除器要求是函数对象或者函数指针,只要能像函数那样调用,使得d(p)成立即可.对删除器的要求是它必须是可拷贝的,不能抛出异常。
shared_array:结合了scoped_array和shared_ptr的功能。
weak_ptr:没有重载operator*和->,最大的作用在于协作shared_ptr工作。可以从shared_ptr或则另一个weak_ptr构造获得资源的观测权,它的构造和析构不会引起引用计数的改变,它只是一个默默的观察者。
intrusive_ptr:对内存占用要求的非常严格,必须与原是指针一样;先存代码已经有了引用计数机制管理的对象。