gpt4 book ai didi

rust - Derive Clone for array of something is Clone?

转载 作者:行者123 更新时间:2023-11-29 07:59:07 26 4
gpt4 key购买 nike

这段代码(also on play)

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 没有问题。

  • 这是为什么,
  • 有什么解决方法吗?我不太热衷于处理 12 个独立的领域。

最佳答案

问题在 implementation of the Clone trait 中:

impl<T> Clone for [T; 4] where T: Copy

这使得真正的问题产生了:为什么我们需要Copy 来克隆一个数组? That implementation说:

fn clone(&self) -> [T; $N] {
*self
}

目前,数组的克隆只是源数组的逐位复制。更有知识的人可能会提出更深层次的原因

关于rust - Derive Clone for array of something is Clone?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29109590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com