我想存储一个包含对其父项的引用的子项集合。
以下示例无法编译(playground)。
以下示例无法编译(playground)。
struct Parent<'p> {
children: Vec<Child<'p>>,
}
struct Child<'p> {
parent: &'p Parent<'p>
}
fn main() {
let mut parent = Parent {children: vec![]};
let child = Child{parent: &parent};
parent.children.push(child);
}
有没有一种方法可以创建这样的循环引用,而不需要引入智能指针,只使用纯引用?也许一些不安全的操作可以帮助吗?
如果不行,可能会有一个最小的工作示例是什么样子的?
更新:为了确保在创建子项时父项不会被删除,让我们引入一个Parent
的特殊方法,但出于明显的原因它也无法编译:
impl<'p> Parent<'p> {
fn add_child(&'p mut self) {
let child = Child{parent: &self};
self.children.push(child);
}
}
更新2: 如果没有“孤儿”子元素,它们应该始终由父元素拥有吗?
Rc
或者Arc
- 实际上,在std::rc
中给出的示例正是你想要实现的。 - Aiden4