unique_ptr_operator_cmp

unique_ptr_operator_cmp (unique_ptr 비교 연산자)

<memory> 헤더에 정의되어 있어요. 두 std::unique_ptr 객체를 비교해요. C++11부터 도입됐어요.

출처: cppreference

본문

template< class T1, class D1, class T2, class D2 >
bool operator==( const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y );   // (1) since C++11, constexpr since C++23
template< class T1, class D1, class T2, class D2 >
bool operator!=( const unique_ptr<T1, D1>& x, const unique_ptr<T2, D2>& y );   // (2)

unique_ptr을 비교해요. operator==x.get() == y.get()으로, operator!=!(x == y)로 동작해요. 즉 저장된 포인터 값을 비교하며, 가리키는 객체의 내용은 비교하지 않아요.

C++20부터는 우주선 연산자 <=>를 비롯해 <, >, <=, >=가 합성되어 연관 컨테이너의 키로 쓸 수 있어요.

예제

#include <iostream>
#include <memory>

int main()
{
    auto a = std::make_unique<int>(42);
    auto b = std::make_unique<int>(42);
    std::cout << std::boolalpha;
    std::cout << "(a == a) : " << (a == a) << '\n';   // true: 같은 객체
    std::cout << "(a == b) : " << (a == b) << '\n';   // false: 서로 다른 주소
    std::cout << "(a < b)  : " << (a < b) << '\n';    // 포인터 주소 비교
}

unique_ptr에 대해 비교 연산자가 정의되어 있어 std::set·std::map의 키로 사용할 수 있어요.

더 알아보기 (Learn more)

cppreference