더북(TheBook)

unique_ptr<T> 객체는 복제할 수 없으므로 함수에 값으로 전달할 수 없다. unique_ptr<T> 객체를 인수로 쓰려면 함수에 참조 매개변수(reference parameter)를 써야 한다. unique_ptr<T> 객체는 복제될 수 없지만, 암묵적 이동 연산(implicit move operation)에 의해 반환될 수 있으므로 함수에서 unique_ptr<T> 객체를 반환하는 건 가능하다.

unique_ptr<T> 객체는 복제할 수 없으므로 unique_ptr<T> 객체를 이동하거나 원하는 위치에서 생성하는 방식으로 컨테이너에 unique_ptr<T> 객체를 저장만 할 수 있다. 같은 주소를 갖는 unique_ptr<T> 객체는 두 개씩 있을 수 없다. shared_ptr<T> 객체는 이런 특성(유일 속성)을 갖지 않으니 객체 하나를 가리키는 포인터가 여러 개 필요할 때나 스마트 포인터를 저장한 컨테이너의 내용을 모두 복제해야 할 때는 shared_ptr<T> 객체를 써야 한다. 이런 경우가 아니라면 unique_ptr<T> 객체를 사용해라. unique_ptr<T> 객체로 된 원소들을 갖는 컨테이너가 있을 때 객체에 대한 원시 포인터가 필요할 때도 있을 것이다. 다음 코드는 unique_ptr<T>에서 원시 포인터를 얻는 방법이다.

auto unique_p = std::make_unique<std::string>(6, '*');
std::string pstr {unique_p.get()};

멤버 함수 get()unique_ptr<T>에 있는 원시 포인터를 반환한다. 객체에 대한 스마트 포인터가 클래스 객체로 캡슐화되어 있지만, 객체에 대한 접근을 제공하고 싶을 때 이러한 코드를 쓰게 된다. unique_ptr<T> 객체는 복제할 수 없으므로 unique_ptr<T>를 반환할 수는 없다.

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