memory_owner_equal

memory_owner_equal (std::owner_equal)

<memory> 헤더에 정의되어 있어요. std::weak_ptrstd::shared_ptr 모두에 대해 소유자 기반(값 기반이 아닌) 혼합 타입 동등 비교를 제공하는 함수 객체예요. C++26부터 도입됐어요.

출처: cppreference

본문

struct owner_equal;

(C++26부터)

이 함수 객체는 std::weak_ptrstd::shared_ptr 모두에 대해 소유자 기반(값 기반이 아닌) 혼합 타입 동등 비교를 제공해요. 두 스마트 포인터는 둘 다 비어 있거나 소유권을 공유할 때만 동등하게 비교돼요. get()이 돌려주는 원시 포인터 값이 달라도(예: 같은 객체 안의 서로 다른 하위 객체를 가리키기 때문에) 소유권을 공유하면 동등해요.

이것은 shared_ptr를 소유권 기반으로 비교해야 하는, 같은 객체의 여러 제어 블록 위치를 다룰 때 선호되는 비교 정책이에요.

std::shared_ptr<Base> sp;
std::weak_ptr<Base> wp = sp;
std::owner_equal eq;
eq(sp, wp);   // 소유권 기반으로 값 비교와 무관하게 동등

std::owner_less·std::owner_hash와 함께 소유권 기반 정렬·해시 컨테이너를 구성할 수 있어요.

더 알아보기 (Learn more)

cppreference