P150 循环引用的处理补充(Rc和Weak)




当初始化一个Rc时,RcBox.strong和RcBox.weak都被初始化为 1 当执行Rc::clone时,RcBox.strong加 1, 当drop一个Rc时,RcBox.strong减 1, 如果此时RcBox.strong变为 0,就再将RcBox.weak减 1, 如果此时RcBox.weak等于 0,就释放RcBox类型对象所占用的内存。 当执行Rc.downgrade时,返回一个Weak引用,并将RcBox.weak加 1, 当drop一个Weak时,RcBox.weak减 1,当RcBox.weak等于 0 时,就释放RcBox类型对象所占用的内存。 当执行Weak.upgrade时,如果此时RcBox.strong为 0 返回None, 否则RcBox.strong加 1,返回Some(Rc)。 这样就可以通过Rc和Weak像上面协同使用就避免了循环引用了。
© 本文版权归作者 cairo 所有,任何形式转载请联系作者。
有关键情节透露