問題一覧に戻る
初級所有権
問題32: 参照のルール
Rustの参照には厳格なルールがあります。不変参照は複数持てますが、可変参照は一つだけです。さらに、不変参照と可変参照は同時に存在できません。これらのルールによりデータ競合を防ぎます。また、参照のライフタイムにより、ダングリング参照(無効なメモリを指す参照)も防がれます。
fn main() {
let mut s = String::from("hello");
// 不変参照を先に作成
let r1 = s;
let r2 = s;
// 不変参照と可変参照は共存不可
// let r3 = &mut s; // Error!
println!("{} and {}", r1, r2);
// 不変参照の使用後なら可変参照OK
let r3 = s;
r3.push_str(" world");
println!("{}", r3);
}