相关疑难解决方法(0)

如何使用Arc和Weak创建循环引用?

我有两个结构:

struct A { 
    map: HashMap<u32, Vec<B>>,
}

struct B {
    weak: Weak<A>
}
Run Code Online (Sandbox Code Playgroud)

A构建,它将自己的几个B,每个链接回A其刚刚建立,与此类似:

let a = Arc::new(A { map: HashMap::new() });

let b1 = B { weak: Arc::downgrade(&a) };
let b3 = B { weak: Arc::downgrade(&a) };
let b2 = B { weak: Arc::downgrade(&a) };

a.map.insert(5, vec![b1, b2]);
a.map.insert(10, vec![b3]);
Run Code Online (Sandbox Code Playgroud)

操场

这不起作用,因为Arc没有提供修改地图的方法.Arc::get_mut因为a Weak已经构造为值,所以不起作用.

它是如何能够构建一个A与一些B?我正在尝试在访问时避免运行时检查,map因为在构造之后它将永远不会再被修改.我使用不安全的代码或批准的夜间功能没有问题.

reference smart-pointers rust

4
推荐指数
2
解决办法
364
查看次数

标签 统计

reference ×1

rust ×1

smart-pointers ×1