원시 포인터와의 주요 차이점은 포인터가 만료되면 메모리가 자동으로 해제한다는 점이다. 따라서 동적으로 할당하지 않은 주소를 할당하면 버그 발생한다.
double d; unique_ptr<double> dd{&d}; // 오류: 동적으로 할당하지 않은 주소를 할당함
포인터 dd의 소멸자가 d를 삭제하려고 시도한다.
unique_ptr는 다른 포인터 타입에 할당되거나 암시적으로 변환할 수 없다. 원시 포인터에서 포인터의 데이터를 얻고 싶다면 멤버 함수 get을 사용하면 된다.
double* raw_dp = dp.get();
다른 unique_ptr에 할당할 수도 없다.
unique_ptr<double> dp2{dp}; // 오류: 복사 금지 dp2 = dp; // 이하 동문
unique_ptr는 오직 이동만 가능하다.
unique_ptr<double> dp2{move(dp)}, dp3; dp3 = move(dp2);