더북(TheBook)

스마트 포인터에 release()를 호출하면 unique_ptr<T> 객체가 가리키는 객체를 해제할 수 있다. release()를 호출하면 원본 객체의 메모리를 해제하지 않아도 unique_ptr<T>의 원시 포인터를 nullptr로 설정할 수 있다.

auto up_name = std::make_unique<std::string>("Algernon");
std::unique_ptr<std::string> up_new_name{up_name.release()};

up_name의 멤버 함수 release()를 호출하면 "Algernon"이 저장된 문자열 객체에 대한 원본 원시 포인터를 반환한다. 이어서 두 번째 문장을 실행하면 up_namenullptr를 갖게 되고, up_new_name은 원본 "Algernon" string 객체를 가리키게 된다. 이렇게 하면 자유 공간에서 유니크 포인터에서 다른 유니크 포인터로 객체의 소유권을 이전할 수 있다.

unique_ptr<T> 포인터가 소유한 객체를 상호 교환할 수도 있다.

auto pn1 = std::make_unique<std::string>("Jack");
auto pn2 = std::make_unique<std::string>("Jill");
pn1.swap(pn2);

셋째 줄을 실행한 후에 pn1은 문자열 "Jill"을 가리키고, pn2"Jack"을 가리키게 된다.

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