gpt4 book ai didi

rust - Rc> 和 RefCell> 有什么区别?

转载 作者:行者123 更新时间:2023-11-29 08:31:08 31 4
gpt4 key购买 nike

Rust 文档涵盖 Rc<RefCell<T>>相当广泛,但不涉及 RefCell<Rc<T>> ,我现在遇到了。

这些是否有效地给出了相同的结果?它们之间有重要区别吗?

最佳答案

Do these effectively give the same result?

它们非常不同。

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>> 有用.

关于rust - Rc<RefCell<T>> 和 RefCell<Rc<T>> 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57487948/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com