Updated src/ownership/references_and_borrowing.md'.

This commit is contained in:
Hector PENG
2026-03-10 09:40:39 +08:00
parent 48d4ce459b
commit 67bb6a289f

View File

@@ -320,14 +320,14 @@ fn dangle() -> &String { // dangle 返回一个到 String 的引用
&s // 我们返回一个指向 Strings 的引用
} // 这里s 超出作用域而被丢弃。因此他的内存没了。
// 危险所在
// 危险!
```
因为 `s` 是在 `dangle` 内部创建的,所以 `dangle` 的代码结束时`s` 将被解除内存分配。然而我们试图返回对他的引用。这意味着这个引用将指向一个无效 `String`。这可不行Rust 不允许我们这做。
因为 `s` 是在 `dangle` 内部创建的,所以 `dangle` 的代码完毕后`s` 将被解分配。我们试图返回对他的引用。这意味着这个引用将指向无效 `String`。这可不行Rust 不允许我们这做。
这里的解决办法,是直接返回那个 `String` 值:
这里的解决方案是直接返回 `String` 值:
```rust
fn dangle() -> String {
@@ -337,23 +337,19 @@ fn dangle() -> String {
}
```
这会没有任何问题地作。所有权被迁出,而不会有任何东西,被解除内存分配。
这会毫无问题地作。所有权被迁出,而没有内容被解分配。
## 引用的规则
**The Rules of References**
我们来回顾一下我们讨论过的关于引用的内容:
我们来回顾一下,我们已讨论过的关于引用的内容:
- 在任何时候,咱们都可以有着一个可变引用,或任意数量的不可变引用;
- 在任何给定时间,咱们都可以 *要么* 有着一个可变引用,*或者* 任意数量的不可变引用;
- 引用必须始终有效。
接下来,我们看看另一种引用:切片。
接下来,我们看看另一种不同的引用:切片。
End