繁体   English   中英

Rc 和有什么不一样<refcell<t> &gt; 和 RefCell <rc<t> &gt;? </rc<t></refcell<t>

[英]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

无法改变ab的值。 这似乎远不如Rc<RefCell<T>>有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM