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의 키로 사용할 수 있어요.