owner_less — std::owner_less
owner_less — std::owner_less
std::owner_less는 std::shared_ptr/std::weak_ptr의 관찰자(owner)를 비교하는 함수 객체예요. <memory> 헤더에 제공돼요.
포인터가 가리키는 값이 아니라, 포인터의 소유권(owner) 기준으로 비교해요. 같은 객체를 가리켜도 관리 블록(control block)이 다르면 다르게 취급되는 상황에서, 소유권 기준의 정렬이 필요할 때 사용해요. std::set<std::shared_ptr<T>> 같은 컨테이너의 기본 비교자로 쓰여요.
출처: cppreference
본문
std::owner_less는 공유 포인터들을 소유권 기준으로 비교해요.
template<class T = void> struct owner_less;
template<> struct owner_less<void>; // C++17
shared_ptr 나 weak_ptr 두 개를 받아, 소유권(관찰자)을 비교해요. ownership 기준 비교는 operator<가 값을 비교하는 것과 달리, 관리 블록(owner)이 실제로 가지고 있는 순서를 따르므로, 서로 다른 방식으로 같은 객체를 참조하더라도 결정적이고 안정적인 순서를 만들어요.
shared_ptr의 operator<는 get()으로 얻은 포인터를 비교하지만, owner_less는 owner를 비교해요. 그래서 두 shared_ptr가 같은 주소를 가리켜도 관리 블록이 다르면 다른 요소로 취급할 수 있어, std::set, std::map의 키로 쓸 때 더 안전해요.
같이 보기
std::shared_ptrstd::weak_ptr