Box

Box 是指向堆上数据的自有指针:

fn main() {
    let five = Box::new(5);
    println!("five: {}", *five);
}
5StackHeapfive

Box<T> 会实现 Deref<Target = T>,这意味着您可以直接在 Box<T> 上通过 T 调用相应方法

  • 在 C++ 中,Boxstd::unique_ptr 类似,除了它一定会不为 null 以外。
  • 在上面的示例中,因为有 Deref,您甚至可以在 println! 语句中省略 *
  • 在以下情况下,Box 可能会很实用:
    • 在编译时间遇到无法知晓大小的类型,但 Rust 编译器需要知道确切大小。
    • 想要转让大量数据的所有权。为避免在堆栈上复制大量数据,请改为将数据存储在 Box 中的堆上,以便仅移动指针。