Avatar ·

Quelle est la différence entre les traits Copy et Clone en Rust ?

Bonjour à tous ! Je suis nouveau en Rust et j'essaie de comprendre la gestion de la mémoire. J'ai lu sur les traits Copy et Clone, mais je ne comprends pas encore bien la différence entre eux. Dans la documentation, il est dit que Clone est une "copie profonde" et Copy une "simple copie bit à bit". Mais en pratique, je vois un comportement étrange. Voici un exemple qui me trouble : ```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 s'applique ? println!("{:?} {:?}", p1, p2); // Ça marche ! let l1 = Line { start: Point { x: 0, y: 0 }, end: Point { x: 5, y: 5 } }; let l2 = l1; // Erreur ! move se produit // println!("{:?} {:?}", l1, l2); // Ne compile pas } ``` Pourquoi Copy s'applique pour Point mais pas pour Line, même si Line utilise Point avec Copy à l'intérieur ? Comment choisir correctement entre Copy et Clone ?