약한 포인터


shared_ptr


여러 포인터가 하나의 객체에 대한 소유권을 공유할 수 있는 스마트 포인터이다. 참조 카운팅을 통해 자원을 관리하며, 카운트가 0이 되면 자동으로 메모리가 해제된다


핵심 특징


  • 두 가지 포인터를 관리하는 내부 구조
  • 참조 횟수를 관리


관리하는 포인터


  • 실제 자원을 가리키는 포인터

  • 참조 카운팅을 위한 제어 블록


참조 카운팅


  • 새로운 shared_ptr이 객체를 참조할 때마다 카운트 증가

  • 참조가 해제될 때마다 카운트 감소

  • 카운트가 0이 되면 자동으로 메모리 해제


생성 방법


// 1. 권장 방법 - make_shared 사용
auto ptr = std::make_shared<int>(10);

// 2. 생성자 사용
std::shared_ptr<int> ptr(new int(10));


주요 멤버 함수


  • get(): 저장된 포인터를 반환한다

  • use_count(): 참조 카운트 수를 반환한다

  • unique(): 현재 객체만 단독으로 소유권을 가지는지 확인한다

  • reset(): 포인터를 해제하고 참조 카운트를 감소시킨다


주의 사항


  • 순환 참조 문제가 발생할 수 있음(weak_ptr을 사용하여 해결 가능)