한 객체를 하나만 소유합니다
복사는 금지되고 std::move로만 소유권을 넘깁니다.
new와 delete를 직접 맞추는 대신 객체
수명에 맞춰 자원을 자동으로 해제합니다.
std::make_unique, 공유 소유는
std::make_shared를 우선합니다.
복사는 금지되고 std::move로만 소유권을 넘깁니다.
마지막 소유자가 사라질 때 객체가 해제되지만 순환 참조에는 취약합니다.
lock()으로 아직 살아 있는지 확인해
shared_ptr 순환을 끊습니다.
std::unique_ptr<T>가 기본값입니다.
std::shared_ptr<T>를 선택합니다.
reset(), 마지막 참조 소멸이 실제 자원
반환 시점을 결정합니다.
해제 책임 스마트 포인터 선택은 "누가 해제하는가"를 코드에 적는 일입니다. 수명 모델이 단순할수록 누수와 댕글링 포인터가 줄어듭니다.