此代码(也在玩)
use std::sync::Arc;
struct Foo {
x: isize, // Something complex in actual code, implements Drop
}
#[derive(Clone)]
struct Good {
a: Option<Arc<Foo>>,
b: Option<Arc<Foo>>,
c: Option<Arc<Foo>>,
}
#[derive(Clone)]
struct Bad {
x: [Option<Arc<Foo>>; 3],
}
fn main() {
println!("See?");
}的Bad失败
<anon>:16:5: 16:29 error: the trait `core::marker::Copy` is not implemented for the type `alloc::arc::Arc<Foo>` [E0277]
<anon>:16 x: [Option<Arc<Foo>>; 3],
^~~~~~~~~~~~~~~~~~~~~~~~
<anon>:14:10: 14:15 note: in expansion of #[derive_Clone]但它与Good没有问题。
发布于 2015-03-17 21:21:24
问题在特性中
impl<T> Clone for [T; 4] where T: Copy这就提出了真正的问题:为什么我们需要Copy来克隆一个数组?执行情况说:
fn clone(&self) -> [T; $N] {
*self
}因此,当前,数组的克隆只是源数组的位对位副本.一个更深层次的原因可能是来自一个更有知识的人。
https://stackoverflow.com/questions/29109590
复制相似问题