rust - 我应该使用什么容器来存储堆分配结构的多个不可变引用?

标签 rust heap-memory

基本上我有一个堆分配的struct Box<State> 。我有多个Value struct需要对此堆分配的不可变引用 struct .

我可以在Value内部使用什么样的属性供此引用?使用Rc<Box<State>>不起作用,因为我需要 Value实现CopyState不实现Copy 。当它需要复制自身时,我只想将指针复制到堆分配的State .

最佳答案

你所要求的基本上是不可能的。如果您有许多指向 float 堆分配的指针,则需要以某种方式跟踪这些指针,以便能够在所有这些指针被销毁后释放它们。然而,这需要在一个指针被重复时执行某事,和/或在指针被销毁时执行某事

嗯,这并不完全正确,有两种方法可以解决这个问题:

  • 不要释放内存,即泄漏内存
  • 让垃圾收集器定期检查可能包含指向分配的指针的所有内存。

但第一个在大多数情况下是不切实际的(即使你负担得起,也很肮脏),而第二个则有其他成本和深远的后果,并且无论如何在当前的 Rust 中都没有得到很好的支持。

唯一明智的做法是删除 Copy要求。也许您感到困惑CopyClone ?两者之间的主要区别在于您必须调用 clone()明确地同时 Copy隐式地工作。 Rc<anything>Clone克隆引用计数指针只会增加引用计数,而不会克隆指针后面的内容。 (在这种情况下,您几乎肯定可以并且应该摆脱 Box ,因为 Rc<T> 已经在堆上分配了 T ,因此 Box 只是一个毫无意义的额外间接寻址。)

关于rust - 我应该使用什么容器来存储堆分配结构的多个不可变引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35522675/

相关文章:

rust - 当你在 Rust 中可变地隐藏一个 Vector 时会发生什么?

parsing - PEG:我的 if 语句语法有什么问题?

rust - 用本地版本替换 crate 依赖项时出现问题

java - 运行项目或构建 apk 时出错

Node.js 堆快照和 Google Chrome 快照查看器

java - 操作和变量是否会在堆栈顶部创建?

arrays - 在稳定 Rust 中,如何将最小值移出数组,删除其他值?

c# - 堆谜语中的对象

c - 稀疏多维数组占用巨大空间-哈希表更好吗?

oop - 为什么 Rust 不支持 trait 对象向上转换?