簡體   English   中英

派生Clone獲取Clone的數組嗎?

[英]Derive Clone for array of something that is Clone?

這段代碼( 也在玩

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個獨立的領域。

問題在於Clone特性實施

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

這就是真正的問題:為什么我們需要Copy才能克隆一個數組呢? 該實施說:

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

因此,目前,數組的克隆只是源數組的逐位復制。 更深層次的原因可能來自更有知識的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM