Box con Estructuras de Datos Recursivos
Los tipos de datos recursivos o los tipos de datos con tamaños dinámicos deben utilizar un Box
:
#[derive(Debug)] enum List<T> { Cons(T, Box<List<T>>), Nil, } fn main() { let list: List<i32> = List::Cons(1, Box::new(List::Cons(2, Box::new(List::Nil)))); println!("{list:?}"); }
-
Si no se utiliza
Box
e intentamos insertar unList
directamente dentro deList
, el compilador no calcularía un tamaño fijo de la estructura en la memoria (List
tendría un tamaño infinito). -
Box
resuelve este problema, ya que tiene el mismo tamaño que un puntero normal y solo apunta al siguiente elemento de laList
en el heap. -
Elimina
Box
de la definición de la lista y muestra el error del compilador. “Recursivo con indirección” es una sugerencia de que puedes usar un Box o referencia de algún tipo, en lugar de almacenar un valor directamente.