問題一覧に戻る
初級所有権
問題29: 所有権の移動
Rustの所有権システムは、メモリ安全性を保証する中核機能です。値の所有者は常に一つだけで、代入や関数呼び出しで所有権が移動(move)します。移動後、元の変数は使用できません。これによりダブルフリーや無効な参照を防ぎます。String型のようなヒープ上のデータで特に重要です。
fn main() {
let s1 = String::from("hello");
// 所有権を移動
let s2 = ;
// s1は使えない
// println!("{}", s1); // Error!
println!("{}", s2);
// 関数が所有権を取得
fn take_ownership(s: ) {
println!("Got: {}", s);
}
take_ownership(s2);
// s2も使えない
// println!("{}", s2); // Error!
}