< 返回版块

jojoGyro 发表于 2023-07-30 11:29

这2种组合方式有什么区别

评论区

写评论
苦瓜小仔 2023-07-30 17:58

基本概念从文档看起,别只看第三手的资料。

https://doc.rust-lang.org/std/cell/index.html

https://doc.rust-lang.org/std/rc/index.html

Pikachu 2023-07-30 14:07

RefCell<Rc<T>>几乎没用。

RefCell的价值在于interior mutability,也就是说你可以通过一个&RefCell<U>获得一个&mut U

然而当U = Rc<T>的时候,你会很快发现&mut Rc<T>是没多少用处的。Rc仅有的两个需要mutable reference的方法是get_mutmake_mut,前者要求没有其它RcWeak指向同一块内存区域,后者则干脆是clone on write。这两个方法都意味着此时Rc和Box、Cow没什么区别,不能提供shared ownership的特性。


Rc<RefCell<T>>的思路就是Rc<U>只能提供&U,所以需要再由RefCell的interior mutability获得&mut T,最终实现在多个地方修改同一块内存区域的目的。这个一般教程都会讲。

1 共 2 条评论, 1 页