基本上我有一个堆分配的struct
Box<State>
。我有多个Value
struct
需要对此堆分配的不可变引用 struct
.
我可以在Value
内部使用什么样的属性供此引用?使用Rc<Box<State>>
不起作用,因为我需要 Value
实现Copy
和State
不实现Copy
。当它需要复制自身时,我只想将指针复制到堆分配的State
.
最佳答案
你所要求的基本上是不可能的。如果您有许多指向 float 堆分配的指针,则需要以某种方式跟踪这些指针,以便能够在所有这些指针被销毁后释放它们。然而,这需要在一个指针被重复时执行某事,和/或在指针被销毁时执行某事。
嗯,这并不完全正确,有两种方法可以解决这个问题:
- 不要释放内存,即泄漏内存
- 让垃圾收集器定期检查可能包含指向分配的指针的所有内存。
但第一个在大多数情况下是不切实际的(即使你负担得起,也很肮脏),而第二个则有其他成本和深远的后果,并且无论如何在当前的 Rust 中都没有得到很好的支持。
唯一明智的做法是删除 Copy
要求。也许您感到困惑Copy
与 Clone
?两者之间的主要区别在于您必须调用 clone()
明确地同时 Copy
隐式地工作。 Rc<anything>
是 Clone
克隆引用计数指针只会增加引用计数,而不会克隆指针后面的内容。 (在这种情况下,您几乎肯定可以并且应该摆脱 Box
,因为 Rc<T>
已经在堆上分配了 T
,因此 Box
只是一个毫无意义的额外间接寻址。)
关于rust - 我应该使用什么容器来存储堆分配结构的多个不可变引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35522675/