더북(TheBook)

원시 포인터와의 주요 차이점은 포인터가 만료되면 메모리가 자동으로 해제한다는 점이다. 따라서 동적으로 할당하지 않은 주소를 할당하면 버그 발생한다.

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);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.