¿Cuál es la diferencia entre los traits Copy y Clone en Rust?
¡Hola a todos! Soy nuevo en Rust y estoy tratando de entender la gestión de memoria. Leí sobre los traits Copy y Clone, pero no termino de comprender cuál es la diferencia entre ellos. En la documentación dice que Clone es una "copia profunda" y Copy es una "copia simple bit a bit". Pero en la práctica veo un comportamiento extraño.
Aquí hay un ejemplo que me confunde:
```rust
#[derive(Copy, Clone)]
struct Point {
x: i32,
y: i32,
}
#[derive(Clone)]
struct Line {
start: Point,
end: Point,
}
fn main() {
let p1 = Point { x: 1, y: 2 };
let p2 = p1; // ¿Copy funciona?
println!("{:?} {:?}", p1, p2); // ¡Funciona!
let l1 = Line {
start: Point { x: 0, y: 0 },
end: Point { x: 5, y: 5 }
};
let l2 = l1; // ¡Error! ocurre un move
// println!("{:?} {:?}", l1, l2); // No compilará
}
```
¿Por qué para Point funciona Copy, pero para Line no, aunque Line también usa Point con Copy internamente? ¿Cómo elegir correctamente entre Copy y Clone?