2.3 借用错误

03-借用错误 — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/borrowing/examples.html

2.3 借用错误

作为这些借用规则如何防止内存错误的具体例子,考虑在仍有对集合元素的引用时修改集合的情况:

1
2
3
4
5
6
7
8
// Copyright 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);
}

类似地,考虑迭代器失效的情况:

1
2
3
4
5
6
7
8
// Copyright 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);
    }
}
  • 在这两种情况下,通过向集合推入新元素来修改它,若集合需要重新分配,都可能使已有的对集合元素的引用失效。
最后修改 August 11, 2026: 更新 (70a5af133)