我是reading about the Box type和该章中提供的 Cons
清单:
enum List {
Cons(i32, Box<List>),
Nil,
}
我明白为什么Rust不允许把另一个 List
放在 List
内(参见清单15-2),我也得到 Box<List>
如何修复问题(参见清单15-5) .
由于 List
被放入 Box
,这是否意味着只有FIRST Cons
将在堆栈中带有指向堆中的 List
的指针?剩下的 Cons
怎么样?他们会在堆栈上吗?当 List
在堆中时,它们如何在堆栈中?或者它们在堆中(听起来不太好)?
1 回答
是 . 第一个
Cons
可以在堆栈上创建,但后续链接的Cons
将在堆上分配,因为它们通过Box
间接,这表示在堆上分配的类型 . 这假设您在堆栈上自然地/正常地创建了第一个Cons
,但是您当然也可以通过Box
在堆上创建它,在这种情况下它们都将在堆上甚至第一个Cons
.