deriveにcopyとcloneがありますが、違いがわからなかったのでメモ
Rust言語の特徴である所有権の移動と密に関係している概念な様子
実際のところ
// Copy型の例 fn process_point(p: Point) { println!("Processing: ({}, {})", p.x, p.y); } let p1 = Point { x: 1, y: 2 }; process_point(p1); // p1の値がコピーされる println!("p1: ({}, {})", p1.x, p1.y); // p1は依然として使用可能 // Clone型の例 fn process_string(s: String) { println!("Processing: {}", s); } let s1 = String::from("hello"); process_string(s1.clone()); // s1のクローンを渡す println!("s1: {}", s1); // s1は依然として使用可能
対象
copyは数値やタプル・配列など、単純なビットコピー可能なものが対象
cloneはStringやヒープ領域に割り当てるものなど、複雑なコピーが必要なものが対象
ディープコピーが必要な場合はclone