由于前辈们在开发事广泛使用了boost的shared_ptr因此我打算自己了解一些这个shared_ptr。
shared_ptr应该就是一种智能指针,这一概念在C++primer当中有提到过。或者称“引用计数指针”
boost shared_ptr的教程内容网上有不少,其中比较详细的要算《boost库导论》了。
shared_ptr头文件: "boost/shared_ptr.hpp"shared_ptr 可以从一个裸指针、另一个shared_ptr、一个std::auto_ptr、或者一个boost::weak_ptr构造。还可以传递第二个参数给shared_ptr的构造函数,它被称为删除器(deleter)。删除器稍后会被调用,来处理共享资源的释放。这对于管理那些不是用new分配也不是用delete释放的资源时非常有用(稍后将看到创建客户化删除器的例子)。shared_ptr被创建后,它就可象普通指针一样使用了,除了一点,它不能被显式地删除。 以下是shared_ptr的部分摘要;最重要的成员和相关普通函数被列出,随后是简单的讨论。 成员函数template <class Y> explicit shared_ptr(Y* p); 这个构造函数获得给定指针p的所有权。参数 p 必须是指向 Y 的有效指针。构造后引用计数设为1。唯一从这个构造函数抛出的异常是std::bad_alloc (仅在一种很罕见的情况下发生,即不能获得引用计数器所需的自由空间)。 template <class Y,class D> shared_ptr(Y* p,D d); 这个构造函数带有两个参数。第一个是shared_ptr将要获得所有权的那个资源,第二个是shared_ptr被销毁时负责释放资源的一个对象,被保存的资源将以d(p)的形式传给那个对象。因此p的值是否有效取决于d。如果引用计数器不能分配成功,shared_ptr抛出一个类型为std::bad_alloc的异常。 shared_ptr(const shared_ptr& r); r中保存的资源被新构造的shared_ptr所共享,引用计数加一。这个构造函数不会抛出异常。 template <class Y> explicit shared_ptr(const weak_ptr<Y>& r); 从一个weak_ptr (本章稍后会介绍)构造shared_ptr。这使得weak_ptr的使用具有线程安全性,因为指向weak_ptr参数的共享资源的引用计数将会自增(weak_ptr不影响共享资源的引用计数)。如果weak_ptr为空 (r.use_count()==0), shared_ptr 抛出一个类型为bad_weak_ptr的异常。 template <typename Y> shared_ptr(std::auto_ptr<Y>& r); 这个构造函数从一个auto_ptr获取r中保存的指针的所有权,方法是保存指针的一份拷贝并对auto_ptr调用release。构造后的引用计数为1。而r当然就变为空的。如果引用计数器不能分配成功,则抛出 std::bad_alloc 。 ~shared_ptr(); shared_ptr析构函数对引用计数减一。如果计数为零,则保存的指针被删除。删除指针的方法是调用operator delete 或者,如果给定了一个执行删除操作的客户化删除器对象,就把保存的指针作为唯一参数调用这个对象。析构函数不会抛出异常。 shared_ptr& operator=(const shared_ptr& r); 赋值操作共享r中的资源,并停止对原有资源的共享。赋值操作不会抛出异常。 void reset(); reset函数用于停止对保存指针的所有权的共享。共享资源的引用计数减一。 T& operator*() const; 这 |