双链接 Rust 结构 [duplicate]

Double linking Rust structs [duplicate]

提问人:Hèctor M.C. 提问时间:10/13/2023 最后编辑:cafce25Hèctor M.C. 更新时间:10/13/2023 访问量:55

问:

我正在尝试实现一个对象集合,其中每个包含的对象也对它们所属的集合具有不可变的引用。

但是,我很难找到一种安全的方法。基本上,每次我尝试实例化该集合的一个元素时,集合引用的可变性或所有权都会发生变化,然后就无法完成缺失的步骤。

这是我尝试做的一个最小示例,您会注意到编译器在抱怨。

struct Collection<'a> {
    elements: Vec<Element<'a>>,
}

struct Element<'a> {
    collection: &'a Collection<'a>,
}

impl<'a> Element<'a> {
    fn new(collection: &'a mut Collection<'a>) -> &'a mut Self {
        let element = Self { collection }; // immutable borrow occurs here
        collection.elements.push(element); // cannot borrow `collection.elements` as mutable
        collection.elements.last_mut().unwrap() // cannot borrow `collection.elements` as mutable
    }
}

在 Rust playground 中看到这一点。

查看链表实现,我看到他们正在使用原始指针。但恕我直言,重点是避免不安全的块,因为我需要取消引用它们。

所以我的问题是:有没有安全的方法可以实现我想要做的事情?这是一个非常糟糕的主意吗?还是应该使用原始指针,就像在链表实现中一样?

链接列表 所有权

评论

1赞 Sven Marnach 10/13/2023
我认为我链接的副本回答了您的问题。如果没有,请在评论中告诉我。
2赞 Sven Marnach 10/13/2023
还相关:为什么我不能在同一结构中存储值和对该值的引用?
0赞 Hèctor M.C. 10/13/2023
你是对的 SvenMarnach .非常感谢!那么我应该删除这个问题吗?
2赞 Sven Marnach 10/13/2023
不,请保留在这里。搜索引擎将索引您的问题,让其他人更容易找到答案。我很快就会在这里链接更多相关问题。

答: 暂无答案