소유권 판단 기준

스마트 포인터 선택

포인터 타입을 먼저 고르기보다 소유자, 공유 여부, 관찰 관계를 순서대로 확인하면 RAII 규칙이 선명해집니다.

기본 unique_ptr 명확한 단독 소유자 하나가 있고, 소유권 이전은 std::move로 표현할 수 있을 때 사용합니다.
공유 shared_ptr 여러 객체가 같은 자원의 수명에 실제로 책임을 나눠야 할 때만 사용합니다.
관찰 weak_ptr shared_ptr 대상이 살아 있는지 확인해야 하지만 수명을 늘리면 안 될 때 사용합니다.
비소유 reference / raw 호출 중 잠깐 빌리거나 C API 경계에 넘길 때 쓰되 delete 책임은 넘기지 않습니다.
1 make 계열로 생성 new/delete를 직접 섞기보다 make_unique, make_shared로 소유 시작점을 한 줄에 둡니다.
2 get() 결과는 삭제 금지 get()은 관찰용 주소입니다. 반환된 원시 포인터에 delete를 호출하지 않습니다.
3 release()는 마지막 선택 unique_ptr에서 release()를 쓰면 자동 해제가 끊기므로 수동 해제 책임자를 즉시 정해야 합니다.