Box<T>
在 Rust 中,Box<T>
是一种智能指针类型,专门用于将数据放到堆上进行动态分配。它主要用于以下几种场景: 类似C++中的unique_ptr指针。
在堆上分配数据:使用
Box
,你可以在堆上存储大小固定的数据。对于非常大的结构体,可以避免在栈上占用过多空间。实现递归数据结构:Rust 不允许在编译时确定大小的递归类型(例如树、链表),因此
Box
允许构建这些数据结构。类型转换和特征对象:将结构体或类型转换为特征对象(例如
dyn Trait
)。
基本用法
创建和解引用
Box
这里
Box::new(x)
将整数5
分配在堆上,*boxed_x
解引用来获取数据。递归数据结构
Box
对递归数据结构特别有用,比如链表:使用
Box<List>
可以创建一个递归定义的链表结构。动态分配和特征对象
Box
还可以用于存储实现特定特征的类型:在这里,
Box<dyn Draw>
将Circle
转换成一个特征对象Draw
,实现了多态性。
性能与内存管理
Box
的开销非常小,因为它只是存储了一个指针。它适合在需要堆上分配单个对象时使用,而无需复杂的引用计数或多线程控制。
Last updated