안녕하세요,
재재입니다.

c++ 에서 사용하는 pointer 는 몇가지 종류가 있습니다.

이번 포스팅에서는,
c++ smart pointer vs pointer 를 설명드릴게요.

(1) c++ smart pointer 란?

c++ smart pointer 는 일반 pointer 의 단점을 보완하기 위해 만들어진,
특별한 기능을 갖는 pointer 입니다.

smart pointer 는 c++98 표준에서 최초로 정의되었으며, (auto_ptr)
개발자가 직접 관리하던 것의 일부를 자동으로 관리 할 수 있도록 하는 목적이었습니다.

이후, c++11 에서 unique_ptr, shared_ptr, weak_ptr 이 정의되었습니다.

https://en.cppreference.com/book/intro/smart_pointers

(2) c++ smart pointer 의 기능

c++ smart pointer 는 크게 3가지 기능을 가지고 있습니다.

  1. 메모리를 자동으로 관리 할 수 있습니다.
  2. 특히, 메모리의 누수 (Memory Leak) 를 막습니다.
  3. 얕은 복사를 수행합니다.
    cf) 얕은 복사란 데이터 자체를 복사하는 게 아니라,
    소유권을 관리하며 참조를 복사합니다.

반면, pointer 는 얕은 복사 및 깊은 복사가 가능합니다. (다만 추가 구현이 요구됩니다)

(3) c++ smart pointer 의 종류별 특징

앞서 언급 드렸듯,
c++ smart pointer 의 종류는 크게 3가지입니다.

  1. unique_ptr
  2. shared_ptr
  3. weak_ptr – shared_ptr 의 참조 횟수를 관리함.

unique_ptr 과 shared_ptr 에 대해 본격 비교를 해보겠습니다.

std::unique_ptrstd::shared_ptr
소유권1개여러개를 가질 수 있음. 정확히는 공유하는 방식
메모리해제소유권이 1개인 만큼,
별도로 관리할 필요 없이,
자동으로 해제됨.
여러개가 존재하기 때문에,
가장 마지막 객체가 사라질 때 비로소 해제됨.
참조횟수관리할 필요 없음.관리 대상.
copy불가능가능
move가능가능

(4) c++ smart pointer 메모리 해제 (reset)

pointer 의 경우 delete 를 명시적으로 사용했어야 했습니다.

delete myPointer; // free memory
myPointer = NULL; // pointed dangling ptr to NULL

다만, smart pointer 는 아래와 같이 사용 할 수 있습니다.

auto my_type_obj = std::make_shared<MyType>(); // MyType class
...
my_type_obj.reset();

(5) 결론

c++ pointer 는 용도에 따라 사용되어야 합니다.

특히, c++ smart pointer 는 확실한 이해를 하고 사용하시면 좋을 거 같습니다.

같이 보면 좋을 컨텐츠 추천 드립니다.

  1. mutex series
  2. floating point error 개선하기
c++ smart pointer vs pointer

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다