#include <memory>
struct A {
int data;
A(int n) : data(n) {}
};
int main() {
std::shared_ptr<A> p11(new A(11)); ⚠️ 동적 선언
→ A type의 객체를 동적으로 생성하고, 이를 가리키는 std::shared_ptr< A > type의 변수 p11을 선언하였다.
std::shared_ptr< T >는 동적으로 할당된 객체를 여러 개의 포인터가 공유할 수 있게 해 주는 스마트 포인터. 객체는 참조 카운트(reference count)가 0이 될 때 자동으로 소멸된다. 동적 할당한 객체를 여러 곳에서 공유해야 할 때 사용한다.
| 상황 | 설명 |
|---|---|
| 여러 개의 클래스나 함수가 같은 객체를 공유해야 할 때 | 예: 하나의 데이터를 여러 곳에서 동시에 읽거나 수정해야 할 때 |
누가 delete 해야 할지 명확하지 않을 때 | 예: 공유된 리소스를 누가 관리해야 할지 불명확한 경우 |
| 참조 횟수를 자동으로 관리하고 싶을 때 | 예: 객체가 더 이상 필요 없으면 자동으로 메모리 해제되게 하고 싶을 때 |
특히 그래픽 게임에서 캐릭터 객체를 공유할 때 shared_ptr로 안전하게 공유하고 자동 삭제되도록 한다.
shared_ptr은 원래부터 "new로 만든 객체를 자동으로 관리" 하기 위해 만들어졌다.
std::shared_ptr<A> p1(new A(10));
→ 여기서 new A(10)은 A 객체를 힙(heap) 메모리에 생성합니다.
그리고 shared_ptr이 그 객체를 소유하면서 참조 카운트를 관리한다.
목표: new는 쓰지만 delete는 직접 하지 않도록!