首页 文章

堆栈中第一个盒装列表的缺点是什么?

提问于
浏览
2

我是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 回答

  • 2

    是 . 第一个 Cons 可以在堆栈上创建,但后续链接的 Cons 将在堆上分配,因为它们通过 Box 间接,这表示在堆上分配的类型 . 这假设您在堆栈上自然地/正常地创建了第一个 Cons ,但是您当然也可以通过 Box 在堆上创建它,在这种情况下它们都将在堆上甚至第一个 Cons .

相关问题