RAII Ownership

스마트 포인터 소유권

newdelete를 직접 맞추는 대신 객체 수명에 맞춰 자원을 자동으로 해제합니다.

권장 생성C++14 이후에는 std::make_unique, 공유 소유는 std::make_shared를 우선합니다.
원시 포인터소유하지 않는 관찰에는 쓸 수 있지만, 해제 책임은 스마트 포인터가 갖게 둡니다.
unique_ptr

한 객체를 하나만 소유합니다

복사는 금지되고 std::move로만 소유권을 넘깁니다.

shared_ptr

참조 카운트로 공유합니다

마지막 소유자가 사라질 때 객체가 해제되지만 순환 참조에는 취약합니다.

weak_ptr

소유하지 않고 관찰합니다

lock()으로 아직 살아 있는지 확인해 shared_ptr 순환을 끊습니다.

단독 자원파일 핸들, 동적 객체처럼 책임자가 하나라면 std::unique_ptr<T>가 기본값입니다.
공유 그래프여러 객체가 같은 수명을 공유해야 할 때만 std::shared_ptr<T>를 선택합니다.
해제 지점스코프 종료, reset(), 마지막 참조 소멸이 실제 자원 반환 시점을 결정합니다.

해제 책임 스마트 포인터 선택은 "누가 해제하는가"를 코드에 적는 일입니다. 수명 모델이 단순할수록 누수와 댕글링 포인터가 줄어듭니다.