問題一覧に戻る
初級所有権
問題40: 関数と所有権

関数の引数や戻り値で所有権がどう扱われるかを理解することは重要です。値渡しでは所有権が移動し、参照渡しでは借用されます。関数から値を返すと、その所有権は呼び出し元に移ります。この仕組みにより、メモリ安全性を保ちながら柔軟なデータの受け渡しが可能になります。適切な選択により効率的なプログラムが書けます。

// 所有権を受け取る関数
fn take_ownership(s: ) {
println!("Taking ownership of: {}", s);
}

// 借用して値を計算
fn calculate_length(s: ) -> usize {
s.len()
}

// 所有権を返す関数
fn give_ownership() -> {
let s = String::from("ownership");

}

fn main() {
let s1 = String::from("hello");
take_ownership();
// s1は使えない
// println!("{}", s1);

let s2 = String::from("world");
let len = calculate_length(&);
println!("{} has length {}", s2, len);

let s3 = give_ownership();
println!("Received: {}", s3);
}