📝

コピートレイト

に公開

1.コピートレイト

所有権の移動は発生せず、新しいオブジェクトとして所有権を作成する。
プリミティブ型(基本データ型)はコピートレイトを使うことができる。
StringやVec<T>などの動的なメモリ確保を行う型は使えない。

・コピートレイトが実装されない型の場合(Move)
fn main() {
let a = String::from("hello"); // StringはCopyトレイトを実装しない
let mut b = a; // 所有権がaからbに移動
b.push_str(" world"); // bは可変なので変更可能
// println!("{}", a); // エラー!aは無効
println!("{}", b); // 出力: hello world
}

・コピートレイトが実装される型の場合(Copy)
fn main() {
let a = 10; // i32はCopyトレイトを実装
let mut b = a; // aの値がコピーされる
b = 20; // bは可変なのでコピーを変更
println!("{}", a); // 出力: 10(aは無効化されず、元の値を保持)
println!("{}", b); // 出力: 20(bはコピーされた値を変更)
}

コピートレイトが実装されているかされていないかで変わる。

Discussion