gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:06:34 24 4
gpt4 key购买 nike

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

我可以在 Value 中使用什么样的属性?这个引用?使用 Rc<Box<State>>不起作用,因为我需要 Value实现CopyState不执行 Copy .当它需要复制自身时,我只想复制指向堆分配的指针 State .

最佳答案

你的要求基本上是不可能的。如果你有许多指向堆分配的指针,你需要以某种方式跟踪这些指针,以便能够在所有这些指针被销毁后重新分配。但是,这需要在其中一个指针被复制时执行某事,和/或在指针被销毁时执行某事

嗯,这不是真的,有两种解决方法:

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

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com