Box<T>2025年3月17日 | 阅读 3 分钟
使用 Box<T> 将数据存储在堆上。主要,Box<T> 用于将数据存储在堆上。 让我们通过一个简单的例子来理解这一点: 输出 value of a is : 1 在上面的例子中,a 包含指向数据 1 的 Box 的值。如果我们访问 Box 的值,则程序打印“1”。当程序结束时,Box 被释放。 box 存储在栈上,而它所指向的数据存储在堆上。 让我们看看上面例子的图示 ![]() Cons 列表
现在,我们创建包含 cons 列表的枚举。 在上面的代码中,我们创建了 List 类型的枚举,它包含 i32 值的 cons 列表数据结构。 现在,我们在下面的例子中使用上面的 List 类型 输出 ![]() 在上面的例子中,Rust 编译器抛出一个错误“具有无限大小”,因为 List 类型包含一个递归变体。结果,Rust 无法找出需要多少空间来存储 List 值。可以使用 Box<T> 来克服无限大小的问题。 使用 Box<T> 获取递归类型的大小Rust 无法确定存储递归数据类型需要多少空间。 Rust 编译器在前面的情况下显示错误 在上面的情况下,我们可以使用 Box<T> 指针,因为编译器知道 Box<T> 指针需要多少空间。 Box<T> 指针的大小在程序执行期间不会改变。 Box<T> 指针指向将存储在堆上而不是 cons 变体中的 List 值。 Box<T> 指针可以直接放置在 cons 变体中。 ![]() 让我们看一个简单的例子 输出 Cons(1, Cons(2, Cons(3, Nil))) 注意:如果我们在递归数据类型中使用 Box<T> 指针,那么 List 值的大小将等于 i32 值的大小加上 box 指针的数据的大小?下一个主题Deref 特征 |
我们请求您订阅我们的新闻通讯以获取最新更新。