유니크포인터(unique_ptr)은 shared_ptr과 비슷하지만 복사 생성자와 할당 연산자가 구현되어 있지 않다. 복사를 할 수는 없으며 오직 이동(std::move)만 할 수 있다.
unique_ptr<class> u_ptr1 (new class());
유니크포인트는 복사/대입 연산을 할 수 없다.
move() 함수로 주소를 이동시켜줘야 한다.
unique_ptr<class> u_ptr2 = u_ptr1; // 에러 발생
unique_ptr<class> u_ptr2 = std::move(u_ptr1);
// u_ptr1의 주소가 u_ptr2로 인계 받으면서 통과된다.
유니크포인터에서 관리하는 메모리를 해제하고 싶을 때는 release() 멤버 함수를 호출한다.
u_ptr1.release(); // 소멸자가 호출된다.
또한 유니크포인터는 공유포인터와 달리 삭제자를 지정할 때 템플릿 인자에 함수의 형(type)을 선언해야한는 점이 다르다.
unique_ptr<class, decltype(&func)> u_ptr(new class(), func);