我正在查看一些使用的代码
Rc<RefCell<SomeStruct>>
所以我去了解Rc和RefCell之间的区别:
以下是选择Box、Rc或RefCell的原因总结:
Rc允许多个所有者拥有相同的数据;Box和RefCell只允许单个所有者。
Box允许在编译时检查不可变或可变借用;Rc仅允许在编译时检查不可变借用;
RefCell允许在运行时检查不可变或可变借用。因为RefCell允许在运行时检查可变借用,所以即使RefCell是不可变的,也可以修改RefCell内部的值。
因此,Rc
确保SomeStruct
可以同时被多个人访问。但是怎么访问呢?我只看到了get_mut
方法,它返回一个可变引用。但是文本解释说“Rc只允许不可变借用”。
如果可以以可变和不可变的方式访问Rc的对象,那么为什么还需要RefCell呢?
Rc
内部某些东西的可变引用。” 这个描述已经适当地加上了 “通常”,所以我认为这是可以接受的。 - Sven MarnachRc
的内部值获取共享借用,但在大多数实际情况下是这样的,所以让它更正确可能会在其他方面更加困惑。 - Sven Marnach