智能指针之weak_ptr

概述

weak_ptr是一种不控制所指向对象生存期的智能指针,它指向一个由shared_ptr管理的对象。将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。并且一旦最后一个shared_ptr被销毁,其所指向的对象就会被释放,就算此时仍有weak_ptr指向该对象,也会被释放。

由于对象可能不存在,我们不能用weak_ptr直接访问对象,而必须调用lock。这个函数检查weak_ptr指向的对象是否仍存在。例如:

if (shared_ptr<int> np = np.lock()) {    // 如果np不为空则条件成立
    cout << *np << endl;                 // 此时可以访问其对象
}
常用操作 用法说明
weak_ptr< T > w 可以指向类型为T的对象的空week_ptr
weak_ptr< T > 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() 如果w.expired()为true,返回一个空shared_ptr,否则返回其绑定的shared_ptr
posted @ 2020-03-21 12:49  southernEast  阅读(943)  评论(0编辑  收藏  举报