[c++] Smart pointers의 종류와 사용법
  1. Smart 포인터란 무엇인가
  2. Unique 포인터
  3. Shared 포인터
  4. Weak 포인터
  5. 사용 예시

1. Smart 포인터란 무엇인가

스마트 포인터(Smart Pointer)는 메모리 누수를 방지하고 프로그램 안정성을 높이기 위해 사용되는 C++의 포인터 형식 중 하나입니다. 스마트 포인터는 자동으로 메모리를 할당하고 해제하여, 개발자가 명시적으로 메모리 관리를 하지 않아도 되도록 도와줍니다.


2. Unique 포인터

유니크 포인터(Unique Pointer)는 특정 객체에 대해 단일 소유권을 가지며, 객체가 더 이상 필요 없을 경우 자동으로 메모리를 해제하는 스마트 포인터입니다. 다른 스마트 포인터나 원시 포인터와 공유할 수 없으며, 특정 객체에 대한 단일 소유권을 강제합니다.

예시 코드:

#include <memory>

int main() {
    std::unique_ptr<int> ptr(new int(5));
    // ptr이 스코프를 벗어나면 자동으로 메모리 해제
}

3. Shared 포인터

쉐어드 포인터(Shared Pointer)는 여러 스마트 포인터가 공유 소유권을 가질 수 있는 스마트 포인터입니다. 객체에 대한 참조 횟수를 추적하여, 참조 횟수가 0이 되면 자동으로 메모리를 해제합니다.

예시 코드:

#include <memory>

int main() {
    std::shared_ptr<int> ptr1(new int(5));
    {
        std::shared_ptr<int> ptr2 = ptr1; // ptr1과 ptr2가 같은 리소스를 공유
    } // ptr2가 스코프를 벗어나도 ptr1으로 인해 메모리 유지
}

4. Weak 포인터

위크 포인터(Weak Pointer)는 순환 참조 문제를 해결하기 위해 사용되는 스마트 포인터입니다. Shared 포인터를 참조하되, 객체의 수명 주기에 영향을 미치지 않으면서 객체를 관찰할 수 있습니다.


5. 사용 예시

스마트 포인터는 메모리 누수와 댓글러포인터 등으로부터 프로그램을 보호하는데 유용합니다. 앞서 소개한 스마트 포인터들을 적절히 활용하여 메모리 관리를 효과적으로 수행할 수 있습니다.


이 글은 cplusplus.com, cppreference.com 등에서 참고 자료를 활용하여 작성되었습니다.