Rust列表元素的多个所有者(列表所有者和几个引用者) - 可能吗?

时间:2016-07-14 16:26:55

标签: reference linked-list rust ownership borrowing

我们有一个带LinkedList的结构:

struct XPipeline {
    handlers: LinkedList<XHandler>,
}

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

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

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

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

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

但究竟是怎么回事?

1 个答案:

答案 0 :(得分:1)

Rust中用于数据结构中多个链接的策略之一是使用Vec<T>作为后备存储,然后使用usize&#34;指针&#34;将其编入索引。

您的案例看起来像:

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

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

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

另请参阅this discussion on Reddit了解处理图形结构中所有权的方法。

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