XiaoboTalk

Rc 和 RefCell

这两者都只能在单线程中使用。

Rc

Rc 可以创建有多个所有权的堆对象,Rc: Reference Count (引用计数)
引用计数,就避免不了循环引用的问题,Rust 也是采用弱引用来解决。
Rc::strong_count(&branch) : 强引用的个数
Rc::weak_count(&branch) : 弱引用的个数
 
Rc::clone(&a) : 不是深拷贝,是对 a 所有权的拷贝,强引用计数会 +1
Rc::downgrade(&a) 给 a 生成一个弱引用
upgrade() : 弱引用检查,会返回一个 Option。
 

RefCell

可以让 Rust 在运行时检查借用规则,而不是在编译时检查。运行时检查不过,会发生 crash (panic)。
主要作用,在一些不可变对象的内部,产生可变借用。