我用什么生命周期来创build相互引用的Rust结构?
我想有结构成员知道他们的父母。 这大概是我想要做的:
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); }
我试图安抚编译器的生命,而没有完全理解我在做什么。
以下是我被卡住的错误消息:
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
这是有道理的,但我不知道该从哪里出发。
借用指针创build循环结构是不可能的。
目前没有什么好的实现循环数据结构的方法, 唯一真正的解决scheme是:
- 使用具有
Rc::new
和Rc:downgrade
的循环结构的Rc<T>
引用计数。 阅读rc
模块文档,并小心不要创build使用强引用的循环结构,因为这些会导致内存泄漏。 - 使用原始/不安全的指针(
*T
)。