智能指针之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 |