generated at
ownershipを移動したりしなかったりする3パターン

値を扱う際に、ownerを気にするやつは3パターン
move
copy
borrow
また、moveとcopyは、syntaxは同じでsemanticsが異なる
そのため、一部のコード片を読むだけでは判断できないこともある


ownershipが実際に移動している
元のownerは未初期化状態になる
例.rs
let s1 = String::from("hello"); let s2 = s1; // ownerがs1からs2にmove println!("{}", s1); // エラー: s1は未初期化状態


copy
ownershipをmoveせずにcopyを行う
2つの独立した値に、それぞれ別のownerができる
値のownerは常に一人なのでownerが二人になったわけではない
例.rs
let x = 5; let y = x; // xはCopyされる println!("{}", x); // OK: xは有効なまま
cloneもここに含まれる


ownershipをmoveせずに参照を貸し出す
immutable/mutableの2種類がある
例.rs
let s1 = String::from("hello"); let s2 = &s1; // s1をイミュータブルに借用 println!("{}", s1); // OK: イミュータブル借用中の読み取りは許可される
借り側が、貸し側より長生きしてはいけないなどの制限が別途必要になる