Box<T> 堆分配
Box 在堆上分配、递归类型、Box<dyn Trait> 存储 trait 对象
Box 堆分配
Box<T> 把数据放在堆上——最简单的智能指针。用于递归类型、大对象、trait 对象。
学完本章你将: 掌握 Box 堆分配、递归类型、Box
Box 基础
rust
fn main() {
// 在堆上分配一个 i32
let b = Box::new(5);
println!("b = {}", b); // 解引用自动发生
// 离开作用域——堆内存自动释放(RAII)
}
递归类型
rust
// 链表——需要 Box 因为大小无法在编译期确定
enum List {
Cons(i32, Box<List>), // Box 让大小固定(指针大小)
Nil,
}
use List::{Cons, Nil};
fn main() {
let list = Cons(1,
Box::new(Cons(2,
Box::new(Cons(3,
Box::new(Nil))))));
}
Box
rust
trait Animal {
fn speak(&self);
}
struct Dog;
impl Animal for Dog { fn speak(&self) { println!("汪汪"); } }
struct Cat;
impl Animal for Cat { fn speak(&self) { println!("喵喵"); } }
fn main() {
let animals: Vec<Box<dyn Animal>> = vec![
Box::new(Dog),
Box::new(Cat),
];
for a in animals {
a.speak();
}
}