std:weak_ptr 用法小结。

来源:互联网 发布:少儿编程软件 编辑:程序博客网 时间:2024/05/20 18:45

http://blog.csdn.net/coolmeme/article/details/43266319 

参考了这篇博客,感谢博主的贡献,感谢博主的翻译。不过他写的太多了,我只是记录一下使用方法,原理就不深究了。需要了解其原理的可以自行去那篇博客学习。

仅供学习参考。。

定义:

std::weak_ptr一般是通过std::shared_ptr来构造的。当std::shared_ptr初始化std::weak_ptr时,std::weak_ptr就指向了相同的地方,但它不改变所指对象的引用计数。这是的构造指初始化它。。。

你所需要的是一个原子操作来检查std::weak_ptr是否过期,如果没过期则提供对所指对象的访问。可以通过从std::weak_ptr构造std::shared_ptr。。这里的构造指获得一个不过期的sharedptr

第一种方式:

std::weak_ptr::lock,它返回一个std::shared_ptr。如果std::weak_ptr失效,则std::shared_ptr为空。

第二种方式:

另一种形式是把std::weak_ptr作为参数来构造std::shared_ptr。这样,如果std::weak_ptr失效的话,则会抛异常:

std::shared_ptr<Widget> spw3(wpw); // if wpw's expired,   
                                                            // throw std::bad_weak_ptr

注意:

1.使用std::weak_ptr来指向可能悬浮的std::shared_ptr一样的指针。

2.可能使用std::weak_ptr的情况包括缓存,观察模式中的观察者列表,以及防止std::shared_ptr环路。




阅读全文
0 0