,我们有两种类型:
pub struct MyElement {
a: Box<int>,
b: Box<int>,
}
pub struct MySet {
as: Box<[int]>,
bs: Box<[int]>,
}
如何,无需克隆/复制,可以实现:
MySet.into_iter()
产生类型的项目MyElement
?MySet.iter()
产生类型的项目&MyElement
?如果我们将“不克隆/复制”解释为“而不创建从现有的盒子中克隆的新盒子或将ints复制到新盒子中”,则不可能。如果您可以将整数复制到新框中,支付内存分配成本,这将变得很容易。
myset.into_iter()产生型骨髓的项目?
如果不复制和进行新的分配,就无法创建必要的单个盒子。鉴于通过全球分配器分配的整数片,您和标准库都不能将其转变为一堆单独的分配,然后可以分别进行分配 - 如此小的分配既没有rust分配器性状的先决条件,也不能做任何分配他们在许多现实世界中的内存分配器上工作(例如,想象一个现实世界中的分配器,该分配器分配了一个大切片的页面,但现在被要求放小分配给他们不属于的免费列表,如果没有附近的正确元数据)
Myset.iter()产生类型和髓样品?等,您需要一个带有两个盒子的布局来参考的结构,您没有一个,并且不能产生一个。
这里的一个关键发现是,Myelement试图做太多以至于无法以这种方式使用 - 它试图持有单个元素,并拥有它们。相反,可以使用具有适当寿命注释的类型,可以使用对原始切片进行引用,具体取决于问题中的(未阐明的)其他上下文。