std::shared_ptr<T>:: use_count
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
(
)
const
noexcept
;
|
||
현재 객체를 관리하는 서로 다른
shared_ptr
인스턴스의 개수(
*
this
포함)를 반환합니다. 관리되는 객체가 없는 경우
0
이 반환됩니다.
다중 스레드 환경에서, use_count는 인스턴스의 수를 원자적으로 검색합니다 (일반적인 구현에서는 memory_order_relaxed 로드를 사용합니다).
목차 |
매개변수
(없음)
반환값
현재 객체를 관리하는 std::shared_ptr 인스턴스의 개수 또는 관리되는 객체가 없는 경우 0 입니다.
참고 사항
일반적인 사용 사례는 다음과 같습니다
-
0과의 비교.
0
. 만약
use_count가 0을 반환하면, 해당 shared pointer는 비어 있음 이며 객체를 관리하지 않습니다(저장된 포인터가 nullptr 인지 여부와 관계없이). -
1과의 비교.
1
. 만약
use_count가 1을 반환하면, 다른 소유자가 없습니다. 이 사용 사례를 위해 deprecated (since C++17) 된 멤버 함수 unique() 가 제공됩니다. (until C++20)
다중 스레드 환경에서
use_count
가 반환하는 값은 근사치로 간주해야 합니다. 다른 스레드에서 원자적 검색과 값의 의미 있는 사용 사이에 공유 소유자의 수가 변경될 수 있기 때문입니다.
use_count
가 1을 반환할 때, 이는 객체를 수정해도 안전함을 의미하지 않습니다. 이전 공유 소유자들이 관리 객체에 대한 접근을 완료하지 않았을 수 있고,
std::weak_ptr::lock
과 같이 새로운 공유 소유자들이 동시에 도입될 수 있기 때문입니다.
use_count
가 0을 반환할 때만 카운트가 정확합니다.
예제
#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); }
가능한 출력:
in main(): sp1.use_count() == 1 (object @ 0x20eec30) in fun(): sp.use_count() == 2 (object @ 0x20eec30)
참고 항목
|
(until C++20)
|
관리 객체가 현재
shared_ptr
객체에 의해서만 관리되는지 확인합니다
(public member function) |