Avatar ·

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

Je viens de commencer à apprendre Rust et je suis confus entre deux traits — Copy et Clone. Apparemment, les deux permettent de copier des valeurs, mais le compilateur se comporte différemment.\n\nVoici un exemple qui m'a troublé. J'essaie de copier une structure :\n\n```rust\nstruct Point {\n x: i32,\n y: i32,\n}\n\nfn main() {\n let p1 = Point { x: 10, y: 20 };\n let p2 = p1; // move\n let p3 = p1; // error: use of moved value\n}\n```\n\nSi j'ajoute `#[derive(Copy)]`, le code fonctionne :\n\n```rust\n#[derive(Copy, Clone)]\nstruct Point {\n x: i32,\n y: i32,\n}\n```\n\nMais si j'utilise seulement `Clone`, je dois appeler explicitement `.clone()` :\n\n```rust\nlet p2 = p1.clone();\n```\n\nPourquoi cela ? Quand utiliser Copy et quand utiliser Clone ? Quelle est la différence fondamentale ? Et pourquoi Copy nécessite-t-il Clone (j'ai vu qu'ils vont souvent ensemble dans derive) ?\n\nExpliquez-moi, s'il vous plaît, comme à un débutant. Merci d'avance !\n<<>>\n

Différence principale : sémantique de déplacement vs copie

\n\n

En Rust, par défaut, de