unique_ptr 사용에 관한 간단한 예제입니다.
'unique_ptr'이라는 이 포인터의 이름은 참조한 data의 고유한 소유권(Unique Ownership)을 의미합니다.
raw pointer에서 unique_ptr의 data를 가져오고 싶다면 멤버 함수 get()을 사용하면 됩니다.
raw pointer와 비교할 때 unique_ptr은 가장 큰 장점을 할당한 memory를 소멸자에서 자동으로 해제해 준다는 것입니다.
그로인해 실수로 인한 memory leak을 방지해 줄 수 있습니다.
이 특성으로 인해 unique_ptr에 동적으로 할당하지 않은 주소를 할당할 경우, VS2015에서 실행 시 run time error가 발생한다. unique_ptr에는 동적으로 할당한 주소만 assign 가능하다는 사실을 알고 계시면 됩니다.
unique_ptr에서는 move만 가능합니다. 구체적으로 표현하자면 Move Semantics입니다.
아래예제는 dp1의 Unique Ownership을 dp1에서 dp2로 전달하고 그 다음으로 dp3로 전달한다.
dp와 dp2는 이후에 nullptr이 되고, dp3의 소멸자는 메모리에서 자동으로 해제 처리를 해준다.
같은 방식으로 unique_ptr을 함수에서 반환할 때 memory의 Unique Ownership도 같이 반환해 주는 데 아래 예제로 참고하시면 됩니다.
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 |