Rc and Weak

Weak parent는 순환을 만들지 않는 관찰 링크다

부모는 Rc<Node>로 자식을 소유하고, 자식은 Weak<Node>로 부모를 가리켜 해제를 막지 않습니다.

트리 관계

branch

부모가 자식을 소유

children은 leaf를 담은 Rc<Node>를 보관합니다.

leaf

자식은 부모를 관찰

parentWeak<Node>라서 소유권을 만들지 않습니다.

upgrade

살아 있으면 Some

부모가 이미 버려졌다면 upgradeNone을 반환합니다.

스코프별 카운트

leaf

생성 직후

strong 1, weak 0으로 시작합니다.

scope

branch 연결

branch는 strong 1, weak 1이고 leaf는 strong 2가 됩니다.

drop

스코프 종료

branch strong이 0이 되어 해제되고 leaf parent는 None이 됩니다.

핵심 정리

순환을 피하려면 소유 관계와 관찰 관계를 나눕니다. 자식에서 부모로 가는 참조는 Weak<T>로 두어 strong_count를 붙잡지 않게 합니다.