rust 有没有办法让多个`Box`指向同一堆内存?

ncgqoxb0  于 2023-04-30  发布在  其他
关注(0)|答案(2)|浏览(71)

看起来像是Box.clone()复制了堆内存。据我所知,Box在超出其作用域以及它所指向的内存区域后将被析构。
所以我想问一个方法来创建一个以上的Box对象指向同一个内存区域。

zc0qhyus

zc0qhyus1#

根据定义,你不应该
Box是显式创建的,假设它是内部对象的唯一所有者。
当需要多个所有者时,可以使用RcArc,它们是引用计数的所有者,只有当最后一个所有者被销毁时,对象才会被删除。
但是,请注意,它们并非没有缺点:

  • 在没有运行时检查的情况下,所包含的对象不能被改变;如果需要突变,这需要使用例如X1 M3 N1 X、X1 M4 N1 X或一些X1 M5 N1 X,
  • 有可能意外地形成对象的循环,由于Rust没有垃圾收集器,这样的循环将被泄漏。
umuewwlo

umuewwlo2#

对于那些来自C背景的人,考虑Box是Rust对std::unique_ptr的实现。
根据设计,std::unique_ptr不能使用复制构造函数或赋值运算符进行复制。
然而,它是可移动的。
Rust中的Box是相同的,除了Rust是默认的移动语言,而C
是默认的复制。

相关问题