分类

Rust 中的引用与借用 (references and borrowing)

2019-08-08 14:08 rust

Rust 中, 引用, 简单而言就是指向一个值所在内存的指针, 这个跟 c++ 里是一致的. 引用本身不支持指针操作, 使用起来更安全.

let s = String::from("Hello");

let s1 = &s;
println!("s1: {}", s1);

以上代码, s1 就是指向 s 所在的内存地址, 大致的内存分布是这样的:

   s1                   s
+--------+          +--------+          +---+
|  ptr   | +------> |ptr     | +------> | H |
+--------+          |length  |          | e |
                    |capacity|          | l |
                    +--------+          | l |
                                        | o |
                                        +---+

另外, 如果一个引用作为函数的参数, 它又称为对一个值的借用.

fn capacity(s: &str) {
  println!("len of s: {}", s.len());
}

let s1 = String::from("Hello");
capacity(&s1);

这里在调用 capacity() 函数时, 创建了一个指向s1的临时的引用, 它就又被称为借用 (borrow). 该借用的作用域是整个函数体.