07-通过引用借用可变所有权

通过引用借用可变所有权 — Rust 语言之旅

内容来源 · Tour of Rust / Rust 语言之旅

原文链接: https://tourofrust.com/49_zh-cn.html

通过引用借用可变所有权

我们也可以使用 &mut 操作符来借用对一个资源的可变访问权限。 在发生了可变借用后,一个资源的所有者便不可以再次被借用或者修改。

内存细节:

  • Rust 之所以要避免同时存在两种可以改变所拥有变量值的方式,是因为此举可能会导致潜在的数据争用(data race)。

示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
struct Foo {
    x: i32,
}

fn do_something(f: Foo) {
    println!("{}", f.x);
    // f 在这里被 dropped 释放
}

fn main() {
    let mut foo = Foo { x: 42 };
    let f = &mut foo;

    // do_something(foo);
    // 会报错: do_something(foo);
    // 因为 foo 已经被可变借用而无法取得其所有权

    // foo.x = 13;
    // 会报错: foo.x = 13;
    // 因为 foo 已经被可变借用而无法被修改

    f.x = 13;
    // f 会因为此后不再被使用而被 dropped 释放

    println!("{}", foo.x);

    // 现在修改可以正常进行因为其所有可变引用已经被 dropped 释放
    foo.x = 7;

    // 移动 foo 的所有权到一个函数中
    do_something(foo);
}
最后修改 August 21, 2026: 更新 (76fc81a2e)