공유 포인터
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을 사용하여 해결 가능)