paredes demoler construir como struct reference circular-reference rust

struct - demoler - como construir paredes en rust



¿Cuánto tiempo utilizo para crear estructuras Rust que se referencian cíclicamente? (1)

No es posible crear estructuras cíclicas con punteros prestados.

No hay ninguna buena forma de lograr estructuras de datos cíclicos en la actualidad; las únicas soluciones reales son:

  1. Utilice el recuento de referencias con Rc<T> con una estructura cíclica con Rc::new y Rc:downgrade . Lea la documentación del módulo rc y tenga cuidado de no crear estructuras cíclicas que utilicen referencias fuertes, ya que causarán pérdidas de memoria.
  2. Use punteros sin procesar / inseguros ( *T ).

Me gustaría tener miembros de la estructura que conozcan a sus padres. Esto es aproximadamente lo que trato de hacer:

struct Parent<''me> { children: Vec<Child<''me>>, } struct Child<''me> { parent: &''me Parent<''me>, i: i32, } fn main() { let mut p = Parent { children: vec![] }; let c1 = Child { parent: &p, i: 1 }; p.children.push(c1); }

Traté de apaciguar el compilador con vidas enteras sin entender completamente lo que estaba haciendo.

Aquí está el mensaje de error en el que estoy estancado:

error[E0502]: cannot borrow `p.children` as mutable because `p` is also borrowed as immutable --> src/main.rs:13:5 | 12 | let c1 = Child { parent: &p, i: 1 }; | - immutable borrow occurs here 13 | p.children.push(c1); | ^^^^^^^^^^ mutable borrow occurs here 14 | } | - immutable borrow ends here

Eso tiene algo de sentido, pero no estoy seguro de a dónde ir desde aquí.