mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2026-08-19 12:43:28 +08:00
Updated src/ownership/references_and_borrowing.md'.
This commit is contained in:
@@ -320,14 +320,14 @@ fn dangle() -> &String { // dangle 返回一个到 String 的引用
|
||||
|
||||
&s // 我们返回一个指向 String,s 的引用
|
||||
} // 这里,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)
|
||||
|
||||
Reference in New Issue
Block a user