Box
Box
是指向堆上数据的自有指针:
fn main() { let five = Box::new(5); println!("five: {}", *five); }
Box<T>
会实现 Deref<Target = T>
,这意味着您可以直接在 Box<T>
上通过 T
调用相应方法。
- 在 C++ 中,
Box
与std::unique_ptr
类似,除了它一定会不为 null 以外。 - 在上面的示例中,因为有
Deref
,您甚至可以在println!
语句中省略*
。 - 在以下情况下,
Box
可能会很实用:- 在编译时间遇到无法知晓大小的类型,但 Rust 编译器需要知道确切大小。
- 想要转让大量数据的所有权。为避免在堆栈上复制大量数据,请改为将数据存储在
Box
中的堆上,以便仅移动指针。