boost weak_ptr使用

来源:互联网 发布:mac迅雷链接不合法 编辑:程序博客网 时间:2024/05/18 05:09

weak_ptr被设计为shared_ptr的助手,可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权,但是weak_ptr没有去共享资源,它的构造不会引起指针引用计数的增加,同样,weak_ptr析构也不会引起指针引用计数的减少

weak_ptr没有重载operator*和operator->,这是特意的。但是可以使用一个非常重要的成员函数lock(),从被观测的shared_ptr获得一个可用的shared_ptr对象,从而操作资源.当expired() == true的时候,lock()函数将返回一个存储空指针的shared_ptr() 下面举个例子:

shared_ptr<int> sp(new int(10));

assert(sp.use_count() == 1);


weak_ptr<int> wp(sp);                      //从shared_ptr创建weak_ptr

assert(wp.use_count() == 1);           //weak_ptr不影响引用计数


if (!wp.expired())                       //判断weak_ptr观察的对象shared_ptr是否失效

{

shared_ptr<int> sp2 = wp.lock();   //获得一个shared_ptr

*sp2 = 100;

assert(wp.user_count() == 2)

}                                                          //退出作用于,sp2自动析构,引用计数减1


assert(wp.sue_count() == 1);  

sp.reset();                         // shared_ptr失效

assert(wp.expired());     

assert(!wp.lock());          //weak_ptr将获得一个空指针

0 0
原创粉丝点击