【问题标题】:Multiple owners for Rust list elements (list owner and several referrers) - possible?Rust 列表元素的多个所有者(列表所有者和多个引用者) - 可能吗?
【发布时间】:2016-11-17 16:22:31
【问题描述】:

我们有一个带有LinkedList 的结构:

struct XPipeline {
    handlers: LinkedList<XHandler>,
}

XPipeline 是所有XHandler 对象的所有者,可以访问和修改它们。

我们已经有了处理程序列表;现在我们需要每个处理程序都可以引用列表中的邻居。也就是说,每个处理程序的方法都可以引用处理程序的邻居,修改它们并调用它们的方法。

我的第一个想法是这样的:我为每个处理程序提供 prevnext 字段,它们将引用邻居。通过在列表中添加一个新的处理程序,我用相应的引用初始化这些字段。现在我可以在所有处理程序的方法中使用这些引用。 (在 C++ 中使用指针会很容易)。

问题是:只允许一个所有者(即具有修改权限)。并且该所有者(所有处理程序)已经是XPipeline 对象。我该如何解决?也许,通过雇用:

handlers: Rc<RefCell<LinkedList<XHandler>>>

但具体如何?

【问题讨论】:

标签: reference linked-list rust ownership borrowing


【解决方案1】:

Rust 中针对数据结构中的多个链接的策略之一是使用Vec&lt;T&gt; 作为后备存储,然后使用usize“指针”对其进行索引。

您的情况类似于:

struct XPipeline {
    head: usize,
    storage: Vec<Node>,
}

struct Node {
    handler: XHandler,
    next: Option<usize>,
    prev: Option<usize>,
}

簿记与您在 C++ 中使用的指针非常相似。

还可以查看this discussion on Reddit,了解在类图结构中处理所有权的方法。

我也会寻找实现双链表、跳过列表、图表或类似的板条箱,并从中获得灵感。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
相关资源
最近更新 更多