我是reading about the Box
type,并且在该章中提供了Cons
列表:
enum List {
Cons(i32, Box<List>),
Nil,
}
我明白了为什么Rust不允许在List
内放置另一个List
(请参见清单15-2),并且我也知道Box<List>
如何解决该问题(请参见清单15-5)。
由于List
被放在Box
中,这是否意味着只有第一个Cons
会在堆栈中指向堆中的List
指针?剩下的Cons
呢?他们会在堆栈上吗?当List
处于堆中时,它们如何在堆栈中?还是它们在堆中(听起来不错)?
答案 0 :(得分:2)
是的。可以在堆栈上创建第一个Cons
,但是随后的链接Cons
将在堆上分配,因为它们是通过Box
间接表示的,而Cons
表示在堆上分配的类型。假设您自然/正常地在堆栈上创建第一个Box
,但是当然也可以通过Cons
在堆上创建它,在这种情况下,它们都将在堆上甚至第一个$mysqliDriver->report_mode
。