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:
- Utilice el recuento de referencias con
Rc<T>
con una estructura cíclica conRc::new
yRc:downgrade
. Lea la documentación del módulorc
y tenga cuidado de no crear estructuras cíclicas que utilicen referencias fuertes, ya que causarán pérdidas de memoria. - 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í.