weak-ptr
weak_ptr 是一种不控制所指向对象生存期的智能指针,它指向由一个shared_ptr管理的对象。
将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。即使有weak_ptr指向对象,对象还是会被释放。
weak_ptr操作 | 功能 |
---|---|
weak_ptr w | 空weak_ptr可以指向类型为T的对象 |
weak_ptr w(sp) | 与shared_ptr sp指向相同对象的weak_ptr。T必须能转换为sp指向的类型 |
w = p | p可以是一个shared_ptr或一个weak_ptr。赋值后w和p共享对象 |
w.reset() | 将w置为空 |
w.use_count() | 与w共享对象的shared_ptr的数量 |
w.expired() | 如果w.use_count()为0,返回true,或者返回false |
w.lock() | 如果expired为true,将返回一个空shared_ptr;否则返回一个指向w的对象的shared_ptr |
当创建一个weak_ptr时,要用一个shared_ptr来初始化它:
auto p = make_shared_ptr<int>(432);
weak_ptr<int> wp(p);//wp弱共享p,p的引用计数没有改变
由于对象可能不存在,我们不能使用weak_ptr直接访问对象,而必须使用lock。
通过这个函数检查weak-ptr指向的对象是否存在。
if(shared_ptr<int> np = wp.lock()){//如果np为空,那么条件不成立
//在if中,np和p共享对象
//p是上面的shared-ptr
}