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环路。