Box
Box
es un puntero propio de datos en el heap:
fn main() { let five = Box::new(5); println!("five: {}", *five); }
Box<T>
implementa Deref<Target = T>
, lo que significa que puedes llamar a métodos desde T
directamente en un Box<T>
.
Box
es igual questd::unique_ptr
en C++, salvo que está asegurado que no será nulo.- En el ejemplo anterior, incluso puedes omitir
*
en la instrucciónprintln!
gracias aDeref
. - Un
Box
puede resultar útil en los siguientes casos:- Si tienes un tipo cuyo tamaño no se conoce durante la compilación, pero el compilador de Rust quiere saber el tamaño exacto.
- Si quieres transferir la propiedad de una gran cantidad de datos. Para evitar que se copien grandes cantidades de datos en la stack, almacena los datos del heap en un
Box
para que solo se mueva el puntero.