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>,但这看起来像某种权宜之计。
请解释一下。