더북(TheBook)

1.6.1.2 unique_ptr<T> 객체를 비교하고 검사하기

unique_ptr<T> 객체를 비교하거나 unique_ptr<T> 객체와 nullptr를 비교하는 비교 연산자들은 비멤버 함수 템플릿으로 제공된다. unique_ptr<T> 객체끼리 비교할 때는 두 객체의 get() 멤버를 호출해서 반환된 주소를 비교한다. unique_ptr<T>nullptr를 비교할 때는 nullptr를 갖는 스마트 포인터에서 get() 멤버를 호출해서 반환된 주소와 비교한다.

unique_ptr<T> 객체는 bool 타입으로 암시적으로 변환될 수 있다. 유니크 포인터가 nullptr이면 변환 결과는 false가 되고, 그렇지 않으면 true가 된다. 이를 이용하면 if 문에서 unique_ptr<T> 객체의 널 체크를 할 수 있다.

auto up_name = std::make_unique<std::string>("Algernon");
std::unique_ptr<std::string> up_new{up_name.release()};
if(up_new)                                    // nullptr가 아니면 true
  std::cout << "The name is " << *up_new << std::endl;
if(!up_name)                                // nullptr이면 true
std::cout << "The unique pointer is nullptr" << std::endl;

nullptr가 아닌지 확인하고 unique_ptr<T>를 역참조해야 하므로 유니크 포인터의 reset()이나 release()를 호출할 때 이와 같은 검사를 하는 게 바람직하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.