diff --git a/src/ownership/references_and_borrowing.md b/src/ownership/references_and_borrowing.md index f5d33ea..c0c17f1 100644 --- a/src/ownership/references_and_borrowing.md +++ b/src/ownership/references_and_borrowing.md @@ -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)