C++ · SMART PTR

shared_ptr 순환 참조

`shared_ptr`끼리 서로를 소유하면 참조 횟수가 0이 되지 않아 객체가 해제되지 않을 수 있습니다.

shared_ptr 순환 참조 구조

weak_ptr
A shared→B A가 B를 강하게 소유합니다.
B shared→A 순환 소유로 count가 남습니다.
B weak→A 소유하지 않고 관찰만 합니다.
lock() 살아 있을 때만 shared_ptr로 승격합니다.
A→B B→A weak lock

shared_ptr 순환 참조 기준

점검
순환 누수 외부 소유자가 사라져도 내부 strong count가 남습니다.
weak 관찰 참조 횟수를 올리지 않아 해제 경로를 막지 않습니다.
lock 확인 객체가 이미 사라졌을 수 있으므로 결과를 확인합니다.
소유자 결정 부모-자식 관계에서 수명 책임자를 먼저 정합니다.