我用什么生命周期创建相互引用的Rust结构?

 雄鹰访谈录 发布于 2023-02-09 06:01

我想让结构成员知道他们的父母.这大约是我正在尝试做的事情:

struct Parent<'me> {
    children: Vec>,
}

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

这有点道理,但我不确定从哪里开始.

1 个回答
  • 使用借用指针创建循环结构是不可能的.

    目前没有任何实现循环数据结构的方法; 唯一真正的解决方案是:

      使用引用计数与Rc<T>用具有环状结构Rc::newRc:downgrade.阅读rc模块文档并注意不要创建使用强引用的循环结构,因为这会导致内存泄漏.

      使用原始/不安全指针(*T).

    2023-02-09 06:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有