Rust 为什么可以';我们是否使用RefCell进行递归数据结构?
为什么我们不能在Rust中使用Rust 为什么可以';我们是否使用RefCell进行递归数据结构?,rust,Rust,为什么我们不能在Rust中使用RefCell进行递归数据结构 无效: enum List { Cons(i32, RefCell<List>), Nil, } 枚举列表{ Cons(i32,参考电池), 无 } 有效期: enum List { Cons(i32, Rc<List>), // or Box<List> Nil, } 枚举列表{ Cons(i32,Rc),//或Box 无 } RefCell包含对象,并将其包
RefCell
进行递归数据结构
无效:
enum List {
Cons(i32, RefCell<List>),
Nil,
}
枚举列表{
Cons(i32,参考电池),
无
}
有效期:
enum List {
Cons(i32, Rc<List>), // or Box<List>
Nil,
}
枚举列表{
Cons(i32,Rc),//或Box
无
}
RefCell
包含对象,并将其包装,它不是堆分配的值。这就是为什么编译器说“递归而无间接”:RefCell
不是间接寻址
另一方面,Box
和Rc
包含对分配到其他地方的对象的引用,因此是间接的
如果没有间接寻址,列表
枚举最终是无限的,因为每个Cons
在其RefCell
中都包含一个完整的列表
枚举
您不能执行将自身作为值、仅作为指针或引用的递归数据结构。这是否足够类似,以至于可以将其作为副本关闭?这个问题不同。我理解为什么递归类型是无效的,我们可以使用间接寻址来解决这个问题。但我假设所有智能指针都提供间接寻址,因为它们毕竟是指针。所以我的问题是为什么RefCell不提供间接寻址?