Box

Box 是具有所有權的指向堆積上的資料的指標:

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

Box<T> 會實作 Deref<Target = T>。也就是說,您可以直接在 Box<T> 上透過 T 呼叫方法

  • Box 就像是 C++ 中的 std::unique_ptr,兩者的差別在於 Box 不會是空值。
  • 上面的範例使用 Deref,因此 println! 陳述式甚至可以省略 *
  • 在以下情況下,您可以使用 Box
    • 編譯時遇到不知道大小為何的型別,但 Rust 編譯器需要知道確切大小。
    • 想要轉移大量資料的所有權。為避免在堆疊上複製大量資料,請改將資料儲存在 Box 的堆積上,這樣系統就只會移動指標。