boost-智能指针

原创 2013年12月03日 11:26:11

boost中智能指针主要包括scoped_ptr,scoped_array,shared_ptr,shared_array;

1.scoped_ptr

scoped_ptr:跟auto_ptr很像,但是它有更严格的管理权也更安全。当离开作用域能够自动释放的指针。因为它是不传递所有权的。事实上它

明确禁止任何想要这样做的企图!这在你需要确保指针任何时候只有一个拥有者时的任何一种情境下都是非常重要的。

头文件:#include <boost/scoped_ptr.hpp>using namespace boost;
函数接口定义:

namespace boost {

  template<class T> class scoped_ptr : noncopyable {

   public:
     typedef T element_type;

     explicit scoped_ptr(T * p = 0); // never throws
     ~scoped_ptr(); // never throws

     void reset(T * p = 0); // never throws

     T & operator*() const; // never throws
     T * operator->() const; // never throws
     T * get() const; // never throws
     
     operator unspecified-bool-type() const; // never throws

     void swap(scoped_ptr & b); // never throws
  };

  template<class T> void swap(scoped_ptr<T> & a, scoped_ptr<T> & b); // never throws

}

用法介绍:

#include <iostream>
#include <boost/intrusive_ptr.hpp>

using namespace boost;
using std::cout;
using std::endl;

int main() 
{
    scoped_ptr<string> sp(new string("test"));
    cout<<*sp<<endl;//获取string的值。 test
    cout<<sp->size()<<endl;//不需要使用delete操作。不允许拷贝构造和自增操作。
    sp.reset();//将sp置为0;当为0时自动删除。调用string的析构函数。
    int *a = sp.get();//可以得到原始指针。不推荐这么做。
}
意义:代码清晰,错误更少,没有多余的操作,同时效率很高,能够跟原始指针同样的速度。

2.shared_ptr

shared_ptr实现了引用计数型的智能指针,可以被自由拷贝和赋值,任意地方共享他,只有当计数为0时,才能删除它。

它更像一个智能指针,同时也是smart_ptr库中左右价值的、最重要,用的最多的一个组件。

boost::shared_ptr的管理机制其实并不复杂,就是对所管理的对象进行了引用计数,当新增一个boost::shared_ptr对该对象进行管理时

,就将该对象的引用计数加一;减少一个boost::shared_ptr对该对象进行管理时,就将该对象的引用计数减一,

如果该对象的引用计数为0的时候,说明没有任何指针对其管理,才调用delete释放其所占的内存。

位置:#include <boost/shared_ptr.hpp>using namespace boost; 

ps:这些智能指针都包含在:#include <boost/smart_ptr.hpp> 头文件中。

类的部分常用接口定义:

完整文档在这:http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/shared_ptr.htm

template<class T> class shared_ptr {
	public:
		 shared_ptr(); // never throws
     		 shared_ptr(std::nullptr_t); // never throws
		~shared_ptr(); // never throws
		
		void reset();

		 T & operator*() const; // never throws; only valid when T is not an array type
     		 T * operator->() const; // never throws; only valid when T is not an array type
		 T * get() const;//获取原始指针。
		
		bool unique() const;//返回是否是唯一拥有者。
		long use_count() const;//返回当前引用计数。
		
}
用法示例:

#include <iostream>
#include <boost/smart_ptr.hpp>

using namespace boost;
using std::cout;
using std::endl;
using std::string;

class demo
{
public:
    ~demo() { std::cout <<"destroying demo\n"; }
    void do_something() { std::cout << "did something\n"; }
};

int main() 
{
    boost::shared_ptr<demo> sp1(new demo());//新建shared指针管理demo对象。
    std::cout<<"Now has "<<sp1.use_count()<<" references\n";

    boost::shared_ptr<demo> sp2 = sp1;
    std::cout<<"Now has "<<sp2.use_count()<<" references\n";
    
    sp1.reset();//sp1解除shared对sp1的指针管理。
    std::cout<<"After Reset has "<<sp2.use_count()<<" references\n";

    sp2.reset();
    std::cout<<"After Reset sp2.\n";
}

/*输出:
    Now has 1 references
    Now has 2 references
    After Reset has 1 references
    destroying demo
    After Reset sp2.
*/




Boost智能指针示例源码

  • 2017年11月15日 23:42
  • 51KB
  • 下载

Boost智能指针——shared_ptr

boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以...

智能指针boost精简源代码

  • 2012年07月06日 13:03
  • 87KB
  • 下载

boost库智能指针,循环引用,定置删除器详解

智能指针用于指向存放在堆,即动态分配对象指针的类,用于对指针所指向的对象生存期的控制,防止内存泄露。   boost库中的智能指针定义在namespace boost中,包括:   shared_...

详解C++中的Boost智能指针

参考 http://developer.51cto.com/art/201012/239004.htm

Boost智能指针——shared_ptr

boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以...

boost库在工作(8)引用计数的智能指针shared_ptr之一

在前面已经介绍了三个智能指针,它们都是适合在局部作用域,不进行拷贝的情况下使用,最为合适,如果使用到其它情况,使用的好处跟坏处一样多,这种情况就不宜使用了。在目前多核处理器流行的今天,并发处理已经成为...

boost::share_ptr智能指针使用示例

http://ticktick.blog.51cto.com/823160/196765 最近项目中使用boost库的智能指针,感觉智能指针还是蛮强大的,在此贴出自己学习过程中编写的测试...

Boost智能指针——shared_ptr

boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以...
  • acs713
  • acs713
  • 2014年06月07日 10:00
  • 1237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost-智能指针
举报原因:
原因补充:

(最多只允许输入30个字)