std::shared_ptr<T>::use_count
Declarations
long use_count() const noexcept;
Returns the number of different shared_ptr
instances (this included) managing the current object. If there is no managed object, 0
is returned.
In multithreaded environment, the value returned by use_count
is approximate (typical implementations use a memory_order_relaxed
load)
Parameters
(none)
Return value
the number of std::shared_ptr
instances managing the current object or 0
if there is no managed object.
Notes
Common use cases include
- comparison with
0
. Ifuse_count
returnszero
, the shared pointer is empty and manages no objects (whether or not its stored pointer isnullptr
). - comparison with
1
. Ifuse_count
returns1
, there are no other owners. The deprecated (since C++17) member functionunique()
is provided for this use case (until C++20). In multithreaded environment, this does not imply that the object is safe to modify because accesses to the managed object by former shared owners may not have completed, and because new shared owners may be introduced concurrently, such as bystd::weak_ptr::lock
.
Example
#include <memory>
#include <iostream>
void fun(std::shared_ptr<int> sp)
{
std::cout
<< "in fun(): sp.use_count() == "
<< sp.use_count()
<< " (object @ " << sp << ")\n";
}
int main()
{
auto sp1 = std::make_shared<int>(5);
std::cout
<< "in main(): sp1.use_count() == "
<< sp1.use_count()
<< " (object @ " << sp1 << ")\n";
fun(sp1);
}
in main(): sp1.use_count() == 1 (object @ 0x20eec30)
in fun(): sp.use_count() == 2 (object @ 0x20eec30)