[cpp] shared_ptr

minjubyeon·2025년 5월 28일

cpp

목록 보기
16/26
#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을 선언하였다.



1. shared_ptr


std::shared_ptr< T >는 동적으로 할당된 객체를 여러 개의 포인터가 공유할 수 있게 해 주는 스마트 포인터. 객체는 참조 카운트(reference count)가 0이 될 때 자동으로 소멸된다. 동적 할당한 객체를 여러 곳에서 공유해야 할 때 사용한다.

상황설명
여러 개의 클래스나 함수가 같은 객체를 공유해야 할 때예: 하나의 데이터를 여러 곳에서 동시에 읽거나 수정해야 할 때
누가 delete 해야 할지 명확하지 않을 때예: 공유된 리소스를 누가 관리해야 할지 불명확한 경우
참조 횟수를 자동으로 관리하고 싶을 때예: 객체가 더 이상 필요 없으면 자동으로 메모리 해제되게 하고 싶을 때

특히 그래픽 게임에서 캐릭터 객체를 공유할 때 shared_ptr로 안전하게 공유하고 자동 삭제되도록 한다.


🔍 A 객체를 왜 굳이 동적으로 할당했는가?

shared_ptr은 원래부터 "new로 만든 객체를 자동으로 관리" 하기 위해 만들어졌다.

std::shared_ptr<A> p1(new A(10));

→ 여기서 new A(10)은 A 객체를 힙(heap) 메모리에 생성합니다.
그리고 shared_ptr이 그 객체를 소유하면서 참조 카운트를 관리한다.

목표: new는 쓰지만 delete는 직접 하지 않도록!


🔍 동적 할당이 필요한 경우

  • 실행 중 크기가 결정될 때
  • 객체를 여러 곳에서 공유하거나, 수명을 직접 제어해야 할 때
    (객체가 언제 없어질지를 함수 scoper가 아닌, 내 코드에서 직접 결정할 때)

1. shared_ptr

profile
안녕하세요.

0개의 댓글