借用.md

借用

Rust 中的借用(borrowing)是一种使得程序能够通过引用访问数据,而不取得数据的所有权的机制。这对于 Rust 的内存安全特性至关重要。借用分为两种:不可变借用和可变借用。以下是两种借用的简单示例:

不可变借用

不可变借用允许读取数据但不能修改它。可以有多个不可变引用指向同一数据,因为它们都不会改变数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fn main() {
let s = String::from("hello");

// 不可变借用
let len = calculate_length(&s);

println!("The length of '{}' is {}.", s, len);
}

// `s` 是对 `String` 的不可变引用
fn calculate_length(s: &String) -> usize {
s.len()
// s 在这里离开作用域,但因为它并不拥有所引用的数据,
// 所以什么也不会发生
}

在这个例子中,calculate_length 函数通过不可变引用接受一个字符串。它可以读取字符串的长度,但不能修改字符串本身。

可变借用

与不可变借用不同,可变借用允许修改数据。在任何给定时刻,只能拥有一个数据的可变引用(这防止了数据竞争),除非使用特定的并发类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fn main() {
let mut s = String::from("hello");

// 可变借用
change(&mut s);

println!("Changed string is '{}'.", s);
}

// `s` 是对 `String` 的可变引用
fn change(s: &mut String) {
s.push_str(", world");
// s 在这里离开作用域并释放借用,但不会释放数据本身,
// 因为它并不拥有数据
}

在这个例子中,change 函数通过可变引用接受一个字符串,并修改它。需要注意的是,smain 函数中被声明为可变的(mut s),因为我们需要通过引用修改它。

Rust 的这种借用系统能够在编译时防止数据竞争、悬垂引用和其他内存安全问题,是 Rust 内存安全保证的核心部分。


借用.md
https://abrance.github.io/2024/04/08/domain/rust/借用/
Author
xiaoy
Posted on
April 8, 2024
Licensed under