owner_less — std::owner_less

owner_less — std::owner_less

std::owner_lessstd::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_ptrweak_ptr 두 개를 받아, 소유권(관찰자)을 비교해요. ownership 기준 비교는 operator<가 값을 비교하는 것과 달리, 관리 블록(owner)이 실제로 가지고 있는 순서를 따르므로, 서로 다른 방식으로 같은 객체를 참조하더라도 결정적이고 안정적인 순서를 만들어요.

shared_ptroperator<get()으로 얻은 포인터를 비교하지만, owner_less는 owner를 비교해요. 그래서 두 shared_ptr가 같은 주소를 가리켜도 관리 블록이 다르면 다른 요소로 취급할 수 있어, std::set, std::map의 키로 쓸 때 더 안전해요.

같이 보기

  • std::shared_ptr
  • std::weak_ptr

더 알아보기 (Learn more)

cppreference