Gma*_*man 16 smart-pointers rust interior-mutability
Rust 文档涵盖的范围Rc<RefCell<T>>非常广泛,但没有RefCell<Rc<T>>涉及我现在遇到的 。
这些是否有效地给出了相同的结果?它们之间有重要区别吗?
Pet*_*all 17
这些是否有效地给出了相同的结果?
它们非常不同。
Rc是一个具有共享所有权的指针,同时RefCell提供内部可变性。它们的组成顺序对它们的使用方式有很大的不同。
通常,您将它们组合为Rc<RefCell<T>>; 整个事情都是共享的,每个共享的所有者都可以改变内容。Rc由于内部数据是共享的,因此外部的所有共享所有者都可以看到更改内容的效果。
您不能通过RefCell<Rc<T>>引用共享一个except,因此此配置在如何使用方面受到更多限制。为了改变内部数据,您需要从外部可变地借用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
Run Code Online (Sandbox Code Playgroud)
有没有办法突变中的值a和b。这似乎远没有Rc<RefCell<T>>.
| 归档时间: |
|
| 查看次数: |
3690 次 |
| 最近记录: |