Rustの所有権の概念について

所有権とは

Rustではデフォルトでの代入は変数のムーブとなる。
例えば、

let a = 1;
let b = a;
println!("{}",a); //ERROR

これは変数aの領域を変数bに明け渡したことによって変数aの持つ領域が無くなったためにERRORが起こる。つまりaのメモリの所有権をbに渡したという意味である。

変数のコピーがしたいならclone()を使用する。

let a = 1;
let b = a.clone();
println!("{}",a); //not ERROR

例外

ただし、これは数値型やbool型、char型に対してCopyトレイトが適用されているためで、これらCopyトレイトが提供されている型とそれらの型のみで構成されたタプル型はデフォルトの代入操作がムーブではなくコピーとなる。