Avatar ·

Rust中Cell和引用计数类型的整体解释

我是Rust新手,正在尝试理解Cell、RefCell、Rc和Arc的工作原理。官方文档中有它们的描述,但我缺乏整体概念——这些类型如何相互关联以及何时使用哪一个。 下面是一个让我困惑的具体例子。我试图创建一个节点可以相互引用的图。我有一个Node结构体: ```rust struct Node { value: i32, children: Vec, } ``` 但我无法添加循环引用,因为所有权要求每个节点只有一个所有者。我尝试使用带有生命周期的引用: ```rust struct Node<'a> { value: i32, children: Vec<&'a Node<'a>>, } ``` 但编译器报错关于生命周期,我不明白如何修复。然后我读到了Rc,但当我想要通过Rc修改节点的值时,编译器说Rc不允许可变访问。于是我找到了RefCell和Rc>,但这看起来像某种权宜之计。 请解释一下。