스마트포인터
개발자 분들에게 가장 큰 근심은 포인터의 메모리 할당과 해제라고 할 수 있습니다. 아무리 메모리에 신경을 쓴다고 해도 하나라도 놓치게 된다면 메모리 누수가 발생하기 때문입니다. 다른 객체지향 언어인 자바는 다행히도 포인터를 사용하지만 자동으로 해제할 수 있도록 설계가 되어 있습니다. 아무래도 C++보다는 그래서 쉬운 편인 것 같습니다. 따라서 C++에서도 자동으로 메모리를 해제해주도록 하는 기능이 c++11에 추가되었습니다. 스마트 포인터의 이름이 왜 스마트인지 이제 느낌이 오시나요?
shared_ptr
shared_ptr<Type> mySmartPtr (new Type); | cs |
선언 방식은 위와 같습니다. shared_ptr을 사용하기 위해서는 참조 카운트의 개념을 알아야 합니다. 참조 카운트는 해당 메모리를 참조하는 포인터가 몇개인지 나타내는 값입니다. shared_ptr로 선언된 포인터가 가리키는 메모리 공간은 참조 카운트가 0이 되는 순간 메모리를 해제하는 것입니다. 예제를 통해 확인해보겠습니다.
예제의 의미를 이해하시나요? 참조된 값에 따라 카운트는 늘어나고 참조된 값을 변형하면 그 값에 따라 모두 값이 변합니다. 만약 main() 함수를 종료하게 되면 참조 카운트가 0이 됩니다. 그 후 메모리 공간을 다시 해제하도록 하는 것입니다.
unique_ptr
unique_ptr이 shared_ptr과 다른 점은 참조 카운트가 1을 넘을 수 없는 것입니다.
unique_ptr로 할당한 메모리는 하나의 변수로만 가리킬 수 있습니다. 만약 두 군데 이상의 포인터가 하나의 메모리 공간을 가리킨다면 컴파일 에러가 발생하는 것입니다.
'SW > C++' 카테고리의 다른 글
[ C++ ] array 개념 및 예제 (0) | 2018.11.16 |
---|---|
[ C++ ] tuple 개념 및 예제 (1) | 2018.11.16 |
[ C++ ] range base for 개념 및 예제 (0) | 2018.11.16 |
[ C++ ] Lambda 개념 및 예제 (0) | 2018.11.15 |
[ c++ ] auto 개념 및 예제 (0) | 2018.11.15 |