|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
(C++17) | ||||
shared_ptr::use_count | ||||
(until C++20*) | ||||
(C++26) | ||||
(C++26) | ||||
| Non-member functions | ||||
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20) | ||||
functions(until C++26*) | ||||
| Helper classes | ||||
(C++20) | ||||
| Deduction guides(C++17) |
long use_count()constnoexcept; | ||
Returns the number of differentshared_ptr instances (*this included) managing the current object. If there is no managed object,0 is returned.
In multithreaded environment, use_count atomically retrieves the number of instances (typical implementations use amemory_order_relaxed load).
Contents |
(none)
The number ofstd::shared_ptr instances managing the current object or0 if there is no managed object.
Common use cases include
use_count returns zero, the shared pointer isempty and manages no objects (whether or not its stored pointer isnullptr).use_count returns 1, there are no other owners.Thedeprecated(since C++17) member functionunique() is provided for this use case.(until C++20)In multithreaded environment
The value returned byuse_count should be considered approximate, as the number of shared owners might change in other threads between the atomic retrieval and meaningful use of the value. Whenuse_count returns 1, it 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. Only whenuse_count returns 0 is the count accurate.
#include <iostream>#include <memory> 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);}
Possible output:
in main(): sp1.use_count() == 1 (object @ 0x20eec30)in fun(): sp.use_count() == 2 (object @ 0x20eec30)
(until C++20) | checks whether the managed object is managed only by the currentshared_ptr object(public member function)[edit] |