Rust 对于堆分配结构的多个不可变引用,应该使用哪个容器?

Rust 对于堆分配结构的多个不可变引用,应该使用哪个容器?,rust,heap,Rust,Heap,基本上我有一个堆分配的structBox。我有多个值结构需要分配一个对该堆的不可变引用结构 对于此引用,我可以在Value中使用什么类型的属性?使用Rc不起作用,因为我需要Value来实现Copy,State不实现Copy。当它需要复制自身时,我只想将指针复制到堆分配的状态您所要求的基本上是不可能的。如果有许多指向堆分配的指针四处浮动,则需要以某种方式跟踪这些指针,以便在所有这些指针被销毁后能够解除分配。但是,这需要在复制一个指针时执行某些操作,和/或在销毁指针时执行某些操作 这不完全正确,有两

基本上我有一个堆分配的
struct
Box
。我有多个
结构
需要分配一个对该堆的不可变引用
结构


对于此引用,我可以在
Value
中使用什么类型的属性?使用
Rc
不起作用,因为我需要
Value
来实现
Copy
State
不实现
Copy
。当它需要复制自身时,我只想将指针复制到堆分配的
状态

您所要求的基本上是不可能的。如果有许多指向堆分配的指针四处浮动,则需要以某种方式跟踪这些指针,以便在所有这些指针被销毁后能够解除分配。但是,这需要在复制一个指针时执行某些操作,和/或在销毁指针时执行某些操作

这不完全正确,有两种方法:

  • 不要解除分配,即泄漏内存
  • 让垃圾收集器周期性地遍历可能包含分配指针的所有内存
但第一种方法在大多数情况下都是不切实际的(即使你负担得起,也相当肮脏),第二种方法还有其他成本和深远的后果,而且在当前的情况下也没有得到很好的支持


唯一明智的做法是放弃
Copy
要求。也许你把
Copy
Clone
搞混了?两者之间的主要区别在于,必须显式调用
clone()
,而
Copy
则隐式工作
Rc
Clone
,克隆引用计数指针只会增加引用计数,而不会克隆指针后面的内容。(在这种情况下,您几乎可以而且应该去掉
,因为
Rc
已经在堆上分配了
T
,所以
只是一个无意义的附加间接寻址。)

这是有意义的。我
Clone
应该足够了,但我真的不明白为什么
Copy
在所有内容都超出范围并且
Rc
达到0之前不能再做一次引用。@dragostis
Copy
很简单
memcpy
。它实际上只是复制组成对象的位,它不能做任何更奇特的事情,而且它也不打算这样做。C++风格的“复制构造函数”,它做了额外的工作来维护不变量(例如正确的ReCube),用“代码>克隆< /COD>”来表示。还有一个问题:如果我有一个处于
状态的方法,该方法有一个
&self
引用,但需要传递一个
Rc
?@dragostis你是什么意思
Rc
实现了
Deref
特性,因此
一些正常的方法()
可以正常工作(当它不是一个方法时,例如,你有
fn foo(x:&State)
,你可以通过
foo(&State\Rc)
调用它,这要感谢Deref强制)。如果
有一个
fn new(s:Rc)
我将从
fn func(&self){Value::new(???)}
创建一个,它在
状态中定义。这是如何实现的?