Box

Box es un puntero propio de datos en el heap:

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

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 que std::unique_ptr en C++, salvo que está asegurado que no será nulo.
  • En el ejemplo anterior, incluso puedes omitir * en la instrucción println! gracias a Deref.
  • 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.