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之前不能再做一次引用。@dragostisCopy
很简单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(???)}
创建一个,它在状态中定义。这是如何实现的?