我有一个结构,由一个固定大小的字节数组和65536个元素组成。
我天真地在我的结构上实现了Clone
- 我创建了一个新数组并循环遍历原始数据,一次一个地复制每个元素。是否有一种更有效或惯用的方式来实现这一点,基本上归结为memcpy
?
答案 0 :(得分:3)
从Rust 1.12开始,数组仅对最多32个项目实现Clone
。但是,数组对任意数量的项目实施Copy
(尽管Copy
需要Clone
!)。因此,我们可以在Clone
的实现中创建数组的隐式副本。
struct Foo {
b: [u8; 65536],
}
impl Clone for Foo {
fn clone(&self) -> Self {
Foo {
b: self.b
}
}
}
如果您还希望您的结构实现Copy
,那么您也可以通过复制Clone::clone
来实现self
:
#[derive(Copy)]
struct Foo {
b: [u8; 65536],
}
impl Clone for Foo {
fn clone(&self) -> Self {
*self
}
}