参照と借用
参照
所有権を移動せずに値を参照することができます。
借用には不変参照(&T
)と可変参照(&mut T
)があります。
不変参照(&T
)
値を変更できない参照です。複数の不変参照を同時に持つことができます。
可変参照(&mut T
)
値を変更できる参照です。 ただし、可変参照は一度に一つしか持つことができません。
借用
関数の引数に参照を取ることを借用と呼びます。
fn main() {
let s1 = String::from("hello");
let len = calculate_length(&s1);
// '{}'の長さは、{}です
println!("The length of '{}' is {}.", s1, len);
}
fn calculate_length(s: &String) -> usize {
s.len()
}
借用のルール
-
不変参照と可変参照を同時に持つことはできない
同じスコープ内で不変参照と可変参照を同時に持つことはできません。これにより、データ競合を防ぎます。
-
可変参照は一度に一つだけ
可変参照は一度に一つしか持つことができません。これにより、データの一貫性を保ちます。
-
可変参照は一度に一つだけ
借用はそのスコープ内でのみ有効です。スコープを抜けると借用は無効になります。
借用の利点
- メモリ安全性: 借用により、所有権を移動せずにデータを安全に操作できます。
- 効率性: 借用を使用することで、不要なデータのコピーを避け、効率的にメモリを使用できます。