Z
ZHANK
智能指针

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();
    }
}