看起来像是Box.clone()复制了堆内存。据我所知,Box在超出其作用域以及它所指向的内存区域后将被析构。所以我想问一个方法来创建一个以上的Box对象指向同一个内存区域。
Box.clone()
Box
zc0qhyus1#
根据定义,你不应该。Box是显式创建的,假设它是内部对象的唯一所有者。当需要多个所有者时,可以使用Rc和Arc,它们是引用计数的所有者,只有当最后一个所有者被销毁时,对象才会被删除。但是,请注意,它们并非没有缺点:
Rc
Arc
umuewwlo2#
对于那些来自C背景的人,考虑Box是Rust对std::unique_ptr的实现。根据设计,std::unique_ptr不能使用复制构造函数或赋值运算符进行复制。然而,它是可移动的。Rust中的Box是相同的,除了Rust是默认的移动语言,而C是默认的复制。
std::unique_ptr
2条答案
按热度按时间zc0qhyus1#
根据定义,你不应该。
Box
是显式创建的,假设它是内部对象的唯一所有者。当需要多个所有者时,可以使用
Rc
和Arc
,它们是引用计数的所有者,只有当最后一个所有者被销毁时,对象才会被删除。但是,请注意,它们并非没有缺点:
umuewwlo2#
对于那些来自C背景的人,考虑
Box
是Rust对std::unique_ptr
的实现。根据设计,
std::unique_ptr
不能使用复制构造函数或赋值运算符进行复制。然而,它是可移动的。
Rust中的
Box
是相同的,除了Rust是默认的移动语言,而C是默认的复制。