owner_hash — std::owner_hash

owner_hash — std::owner_hash

std::owner_hashstd::shared_ptr/std::weak_ptr의 소유권(owner)을 해시하는 함수 객체예요. C++26에서 도입됐어요. <memory> 헤더에 제공돼요.

std::unordered_set<std::shared_ptr<T>> 같은 컨테이너를 만들 때, 값이 아니라 관리 블록(owner) 기준으로 해시를 계산해요. owner_less와 짝을 이루어, 동일한 주소를 가리켜도 관리 블록이 다른 포인터들을 구분할 수 있게 해줘요.

출처: cppreference

본문

std::owner_hash는 공유 포인터를 소유권 기준으로 해시해요.

template<class T = void> struct owner_hash;

shared_ptrweak_ptr를 받아 관리 블록(owner)에 대한 해시 값을 반환해요. 소유권 기준 해시는 owner_less와 일관되도록 설계되어, 같은 owner는 같은 해시를 갖고, owner가 다르면 (가능한 한) 다른 해시를 가져요.

이를 owner_less와 함께 사용하면, std::unordered_set/std::unordered_map 등에서 "주소는 같지만 관리 블록이 다른" 포인터들을 구분하는 소유권 기반 해시 컨테이너를 만들 수 있어요. 값 비교 해시(std::hash<shared_ptr>)와는 다른 기준을 사용한다는 점이 핵심이에요.

같이 보기

  • std::owner_less
  • std::owner_equal
  • std::shared_ptr

더 알아보기 (Learn more)

cppreference