借用エラー

これらの借用ルールがどのようにメモリエラーを防ぐのかを示す具体例として、その要素への参照がある状態でコレクションを変更するケースを考えてみましょう:

// 著作権 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn main() {
    let mut vec = vec![1, 2, 3, 4, 5];
    let elem = &vec[2];
    vec.push(6);
    dbg!(elem);
}

同様に、イテレータの無効化のケースを考えてみましょう:

// 著作権 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn main() {
    let mut vec = vec![1, 2, 3, 4, 5];
    for elem in &vec {
        vec.push(elem * 2);
    }
}
  • どちらのケースでも、コレクションに新しい要素を push して変更すると、コレクションが再割り当てを行う必要がある場合、コレクションの要素への既存の参照が無効になる可能性があります。