首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为克隆的数组派生克隆?

为克隆的数组派生克隆?
EN

Stack Overflow用户
提问于 2015-03-17 21:01:25
回答 1查看 354关注 0票数 3

此代码(也在玩)

代码语言:javascript
复制
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失败

代码语言:javascript
复制
<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没有问题。

  • 为什么这个和,
  • 有什么解决办法吗?我不太喜欢处理12个独立的领域。
EN

回答 1

Stack Overflow用户

发布于 2015-03-17 21:21:24

问题在特性

代码语言:javascript
复制
impl<T> Clone for [T; 4] where T: Copy

这就提出了真正的问题:为什么我们需要Copy来克隆一个数组?执行情况说:

代码语言:javascript
复制
fn clone(&self) -> [T; $N] {
    *self
}

因此,当前,数组的克隆只是源数组的位对位副本.一个更深层次的原因可能是来自一个更有知识的人。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29109590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档