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

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

트리 관계

부모 · branchchildren: Vec<Rc<Node>>자식의 생존을 소유
자식 · leafparent: Weak<Node>upgrade()는 Some 또는 None

스코프별 카운트

leaf

생성 직후

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

범위

branch 연결

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

drop

스코프 종료

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

핵심 정리

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