Por que a característica de cópia é necessária para a inicialização da matriz padrão (com valor de estrutura)?

Quando defino uma estrutura como esta, posso transmiti-la para uma função por valor sem adicionar nada específico:

#[derive(Debug)]
struct MyType {
    member: u16,
}

fn my_function(param: MyType) {
    println!("param.member: {}", param.member);
}

Quando eu quero criar uma matriz deMyType instâncias com um valor padrão

fn main() {
    let array = [MyType { member: 1234 }; 100];
    println!("array[42].member: ", array[42].member);
}

O compilador Rust me diz:

error[E0277]: the trait bound `MyType: std::marker::Copy` is not satisfied
  --> src/main.rs:11:17
   |
11 |     let array = [MyType { member: 1234 }; 100];
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::marker::Copy` is not implemented for `MyType`
   |
   = note: the `Copy` trait is required because the repeated element will be copied

Quando eu implementoCopy eClone, tudo funciona:

impl Copy for MyType {}
impl Clone for MyType {
    fn clone(&self) -> Self {
        MyType {
            member: self.member.clone(),
        }
    }
}

Por que preciso especificar um espaço vazioCopy implementação de características?

Existe uma maneira mais simples de fazer isso ou eu tenho que repensar alguma coisa?

Por que isso funciona ao passar uma instância deMyType para a função por valor? Meu palpite é que ele está sendo movido, portanto, não há cópia em primeiro lugar.

questionAnswers(2)

yourAnswerToTheQuestion