std::shared_ptr<T>::use_count
< cpp | memory | shared ptr
long use_count() const noexcept; |
||
返回管理当前对象的不同 shared_ptr
实例(包含 this )数量。若无管理对象,则返回 0 。
多线程环境下, use_count 返回的值是近似的(典型实现使用 memory_order_relaxed 加载)
参数
(无)
返回值
管理当前对象的 shared_ptr
实例数量,或若无被管理对象则为 0 。
注意
常用使用包括
- 与 0 比较。若
use_count
返回零,则智能指针为空且不管理对象(无论被存储指针是否为空)。多线程环境下,这不隐含被管理对象的析构函数已完成。 - 与 1 比较。若
use_count
返回 1 ,则无其他拥有者。(被弃用成员函数 unique() 为此使用情况提供。)多线程环境中,这不隐含对象可以安全修改,因为先前拥有者对被管理对象的访问可能未完成,而因为新的共享拥有者可以同时引入,例如用 std::weak_ptr::lock 。
示例
运行此代码
#include <memory> #include <iostream> void fun(std::shared_ptr<int> sp) { std::cout << "fun: sp.use_count() == " << sp.use_count() << '\n'; } int main() { auto sp1 = std::make_shared<int>(5); std::cout << "sp1.use_count() == " << sp1.use_count() << '\n'; fun(sp1); }
输出:
sp1.use_count() == 1 fun: sp.use_count() == 2
参阅
(C++20 前) |
检查所管理对象是否仅由当前 shared_ptr 的实例管理 (公开成员函数) |