smart pointer

스마트 포인터는 포인터 소유권을 타입으로 표현한다

std::unique_ptr, std::shared_ptr, std::weak_ptr, reset(), std::move는 해제 책임을 명확히 만드는 도구입니다.

unique_ptr

unique_ptr 단독 소유권

std::move로 소유권 이전이 코드에 드러납니다.

shared_ptr

여러 소유자가 같은 객체 수명을 공유합니다

참조 카운트 비용과 순환 참조 위험을 함께 봅니다.

weak_ptr

weak_ptr 순환 차단

사용 전 lock으로 객체가 살아 있는지 확인합니다.

raw pointer

관찰 포인터와 소유 포인터

new/delete를 직접 쓰는 코드는 예외와 조기 반환에서 취약해집니다.

reset 현재 소유 객체를 해제하거나 새 객체로 교체합니다.
nullptr 비어 있는 스마트 포인터는 조건문으로 자연스럽게 검사할 수 있습니다.
순환 참조 shared_ptr끼리 서로 소유하면 카운트가 0이 되지 않을 수 있습니다.