프로그래밍

[C++] unique_ptr

하루삼십만원 2020. 10. 17. 17:44
반응형

unique_ptr 사용에 관한 간단한 예제입니다.

'unique_ptr'이라는 이 포인터의 이름은 참조한 data의 고유한 소유권(Unique Ownership)을 의미합니다.

 

raw pointer에서 unique_ptr의 data를 가져오고 싶다면 멤버 함수 get()을 사용하면 됩니다.

unique pointer sample code
result of unique pointer sample code

raw pointer와 비교할 때 unique_ptr은 가장 큰 장점을 할당한 memory를 소멸자에서 자동으로 해제해 준다는 것입니다.

그로인해 실수로 인한 memory leak을 방지해 줄 수 있습니다.

 

이 특성으로 인해 unique_ptr에 동적으로 할당하지 않은 주소를 할당할 경우, VS2015에서 실행 시 run time error가 발생한다. unique_ptr에는 동적으로 할당한 주소만 assign 가능하다는 사실을 알고 계시면 됩니다.

error when assign memory address that are not dynamically allocated

 

unique_ptr에서는 move만 가능합니다.  구체적으로 표현하자면 Move Semantics입니다.

아래예제는 dp1의 Unique Ownership을 dp1에서 dp2로 전달하고 그 다음으로 dp3로 전달한다.

dp와 dp2는 이후에 nullptr이 되고, dp3의 소멸자는 메모리에서 자동으로 해제 처리를 해준다.

같은 방식으로 unique_ptr을 함수에서 반환할 때 memory의 Unique Ownership도 같이 반환해 주는 데 아래 예제로 참고하시면 됩니다.

 

move() and return unique_ptr sample
result of move and return unique_ptr sample

unique_ptr을 이용한 배열 구현 방법이다. 

array with unique_ptr

unique_ptr의 중요한 장점중 하나는 raw pointer에 배해 time과 memory에 관한 overhead가 없다는 점입니다.

 

반응형

'프로그래밍' 카테고리의 다른 글

[C++] Philosophy 1 & 2  (0) 2020.11.29
[C++] shared_ptr, weak_ptr  (0) 2020.10.18
[C++] string format  (0) 2020.10.12
[C++] write string with ostream, stringstream class  (0) 2020.10.11
[C++] File input/output  (0) 2020.10.11