본문 바로가기

Language/C++

Smart Pointer

Smart Pointer(RAII객체, 클래스)



RAII(Resource Acquisition Is Initialization


C++에서 자주 쓰이는 idiom으로 resource의 안전한 사용을 위해 객체가 쓰이는 scope를 벗어나면 자원을 해제해 주는 기법이다.

heap에 쌓이는 자원은 명시적으로 해제해주지 않으면 memory leak이 발생하는데

stack에서 사용되는 자원은 명시적으로 해제해주지 않아도 자신의 scope가 종료되면 자동으로 해제된다는 원리를 이용한것



unique_ptr 


하나의 smart pointer만이 특정 객체를 소유할 수 있도록, 객체에 소유권 개념을 도입한 smart pointer

해당 객체의 소유권을 가지고 있을때만 소멸자가 해당 객체를 삭제할 수 있음

move( )함수로 소유권을 이전할 수 있지만 복사는 불가능



shared_ptr


하나의 특정 객체를 참조하는 smart pointer가 총 몇개인지를 참조하는 smart pointer(reference count를 참조)

Reference count가 0이되면 메모리 해제


P.S) C#이 주로 사용하는 방법으로 알고있다.


weak_ptr


하나 이상의 shared_ptr instance가 소유하는 객체에 대한 접근을 제공, 소유자의 수에는 포함되지 않는다.

shared_ptr instance들 사이의 Circular reference(순환참조)를 제거하기 위해 사용


P.S) Circular reference(순환참조) : 서로가 상대방을 참조하고 있는 상황



주의점

weak_ptr이 shared_ptr보다 더 오래 살아남아야 할 경우 사용하면 안된다.

'Language > C++' 카테고리의 다른 글

POD / Standard Layout Type / Trivial Type  (0) 2019.03.03
객체초기화 ' = ' , ' ( ) ' 의 차이점  (0) 2019.03.03
const / #define / constexpr 차이점  (0) 2019.03.01
Pointer / Reference 차이점  (0) 2019.03.01