Box
Box
是具有所有權的指向堆積上的資料的指標:
fn main() { let five = Box::new(5); println!("five: {}", *five); }
Box<T>
會實作 Deref<Target = T>
。也就是說,您可以直接在 Box<T>
上透過 T
呼叫方法。
Box
就像是 C++ 中的std::unique_ptr
,兩者的差別在於Box
不會是空值。- 上面的範例使用
Deref
,因此println!
陳述式甚至可以省略*
。 - 在以下情況下,您可以使用
Box
:- 編譯時遇到不知道大小為何的型別,但 Rust 編譯器需要知道確切大小。
- 想要轉移大量資料的所有權。為避免在堆疊上複製大量資料,請改將資料儲存在
Box
的堆積上,這樣系統就只會移動指標。