Почему свойство Copy необходимо для инициализации массива по умолчанию (struct valueed)?

Когда я определяю такую ​​структуру, я могу передать ее функции по значению, не добавляя ничего конкретного:

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

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

Когда я хочу создать массивMyType экземпляры со значением по умолчанию

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

Компилятор Rust говорит мне:

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

Когда я реализуюCopy а такжеClone, все работает:

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

Почему мне нужно указать пустойCopy черта реализации?

Есть ли более простой способ сделать это, или я должен что-то переосмыслить?

Почему это работает при передаче экземпляраMyType к функции по значению? Я предполагаю, что он перемещается, поэтому в первую очередь его нет.

Ответы на вопрос(2)

Ваш ответ на вопрос