[英]What is the difference between Rc<RefCell<T>> and RefCell<Rc<T>>?
Rust 文档涵盖了Rc<RefCell<T>>
相当广泛,但没有 go 进入我现在遇到的RefCell<Rc<T>>
。
这些是否有效地给出了相同的结果? 它们之间有重要的区别吗?
这些是否有效地给出了相同的结果?
它们非常不同。
Rc
是一个共享所有权的指针,而RefCell
提供内部可变性。 它们的组成顺序对它们的使用方式有很大的不同。
通常,您将它们组合为Rc<RefCell<T>>
; 整个事情都是共享的,每个共享的所有者都可以改变内容。 由于内部数据是共享的,因此外部Rc
的所有共享所有者都会看到更改内容的效果。
除非通过引用,您不能共享RefCell<Rc<T>>
,因此此配置在如何使用方面受到更多限制。 为了改变内部数据,您需要从外部RefCell
可变地借用,但随后您就可以访问不可变的Rc
。 改变它的唯一方法是用完全不同的Rc
替换它。 例如:
let a = Rc::new(1);
let b = Rc::new(2);
let c = RefCell::new(Rc::clone(&a));
let d = RefCell::new(Rc::clone(&a));
*d.borrow_mut() = Rc::clone(&b); // this doesn't affect c
无法改变a
和b
的值。 这似乎远不如Rc<RefCell<T>>
有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.