posted by 구로보루 2018. 2. 23. 13:54

스마트 포인터는 원시 포인터를 모방한 템플릿 타입의 객체로 주소를 담고 사용가능하다.


원시 포인터와 차이점

1. 자유 공간에 할당된 메모리 주소만 저장

2. 산술연산 불가능


스마트 포인터의 이점

1. delete를 명시적으로 호출하지 않아도 자동으로 메모리 공간을 정리해 버그를 줄여준다.

2. null로 초기화 하지 않아도 디폴트 생성자가 자동으로 생성한다.

3. 허상 포인터를 효과적으로 예방할 수 있다.

4. 자동 가비지 컬렉션이 가능하다.




unique_ptr<T>


MSDN문서를 보면 '더 강력한 unique_ptr이 auto_ptr을 대체한다'고 나와있다.(https://msdn.microsoft.com/ko-kr/library/ew3fk483.aspx)

여러 객체가 같은 주소를 소유할 수 없기 때문에 객체에 대한 단일 소유권을 가질 수 있다.


객체 생성

 std::make_unique<T>()

memory 헤더에 정의되어 있고 함수에 인자를 통해 유니크 포인터를 반환하는 함수이다.


멤버 함수

 reset()

유니크 포인터가 가리키는 객체를 소멸시키는 함수이다.

인자가 없으면 단순 소멸이고 인자가 있으면 새 객체의 주소로 대체된다.

 


 

 release()

유니크 포인터가 가리키는 객체를 nullptr로 해제하고 해당 객체를 반환한다.

 

 

 swap()

두 객체를 교환한다.

 

 

 

 get()

주소를 반환한다.

 


 

shared_ptr<T>

 

자유공간에 있는 객체 하나에 대한 소유권을 공유할 수 있다.

 

객체 생성

 std::make_shared<T>()

memory 헤더에 정의되어 있고 함수에 인자를 통해 공유 포인터를 반환하는 함수이다.

 

멤버 함수

 reset()

유니크 포인터와 동일하다.

 

 unique()

객체의 인스턴스 개수가 1이면 true를 아니면 false를 반환

 

 use_count()

인스턴스의 개수를 반환다.

 

 

 

 

'공부 > C++(STL)' 카테고리의 다른 글

array 컨테이너  (0) 2018.03.23
람다 식(익명함수)  (0) 2018.03.01
반복자 연산  (0) 2018.01.26
accumulate 함수  (0) 2018.01.24
static 멤버  (0) 2017.09.05