Cycle Guard
순환 참조 차단 기준
Rc끼리 서로 강하게 가리키면 카운트가 0이 되지 않아 메모리가 해제되지 않으므로 소유 관계와 관찰 관계를 분리해야 합니다.
소유는 Rc, 관찰은 Weak
값을 살리는 방향만 strong_count에 남깁니다.
Before: Rc 순환
leak risk
Node A
Rc<B>
strong
strong
Node B
Rc<A>
drop 이후
서로가 서로를 살려 strong_count가 0으로 내려가지 않습니다.
After: Weak 역참조
break cycle
Owner
Rc<Child>
strong down
weak back
Child
Weak<Owner>
drop 이후
Weak는 소유하지 않으므로 strong_count가 0이 되면 값이 해제됩니다.
1. 소유 방향
값의 생명주기를 책임지는 간선만 Rc로 둡니다.
2. 관찰 방향
부모, 캐시, 역참조는 Weak로 낮춥니다.
3. upgrade
대상이 사라진 경우 None을 처리합니다.