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

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

struct Parent { children: Vec<Child>, } struct Child { parent: &'me Parent, 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 comstackdor 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í.

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 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 ).
    Intereting Posts