스마트 포인터는 C++11 에서부터 추가되기 시작하였으며 C++에서 스마트 포인터를 사용하려면 <memory>
헤더가 필요하다.
C++ 스마트 포인터에는 unique_ptr
, shared_ptr
, weak_ptr
이 존재한다.
스마트 포인터는 C++ 에서 포인터 변수와 관련하여 안전하고 효율적인 코드를 작성하는데 유용하다.
스마트 포인터는 일반 포인터처럼 생겼으나 일반 포인터 보다 많은 기능을 가진 객체이다. 객체는 포인터 값에 접근하기 위한 operator *
와 operator ->
를 지원하여야 한다.
스마트 포인터가 일반 포인터 보다 똑똑하기 위해 일반 포인터가 하지 못하는 일을 하고자 한다. C++ 프로그램에서 가장 많이 발생하는 문제가 포인터와 메모리 관리와 관련되어 있다.
C++에서 스마트 포인터를 사용하는 공통적인 이유는 다음과 같다.
- 자동 메모리 해지
스마트 포인터를 사용하면 delete
를 명시적으로 호출하지 않아도 되기 때문에 동적으로 할당한 메모리의 해지에 대해서 잊어도 된다.
- 자동 초기화
스마트 포인터가 객체이기 때문에 디폴트 생성자에서 포인터 변수를 NULL로 초기화하하기 때문에 명시적으로 NULL로 초기화하지 않아도 된다.
- Dangling 포인터
Dangling 포인터는 이미 메모리에서 삭제된 객체를 가리키는 포인터로 스마트 포인터를 사용할 경우 이러한 포인터가 없도록 한다.
-
가비지 컬렉션 (Garbage Collection)
-
효율성
스마트 포인터는 가용한 메모리를 좀더 효율적으로 사용할 수 이도록 하며 할당, 해지 시간을 단축시킬 수 있다.
이 곳에서는 세 가지의 포인터에 대해서 살펴본다.