From 73d1310b766198a92c69040a55dd9fa5ed2199eb Mon Sep 17 00:00:00 2001 From: "Peng Hailin," Date: Tue, 12 Dec 2023 21:58:56 +0800 Subject: [PATCH] Refining Ch04. --- src/ownership/about_ownership.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ownership/about_ownership.md b/src/ownership/about_ownership.md index a8f3b1c..14d670b 100644 --- a/src/ownership/about_ownership.md +++ b/src/ownership/about_ownership.md @@ -279,11 +279,13 @@ warning: `ownership_demo` (bin "ownership_demo") generated 1 warning error: could not compile `ownership_demo` (bin "ownership_demo") due to previous error; 1 warning emitted ``` -若在使用其他编程语言时,曾听说过 *浅拷贝(shallow copy)* 和 *深拷贝(deep copy)* 这两个说法,那么这种对指针、长度与容量的拷贝,而未拷贝数据的概念,或许听起来像是进行了一次浅拷贝。但由于 Rust 还将第一个变量进行了失效处理,因此这里就不叫浅拷贝,而叫做 *迁移(move)*。在这个示例中,就会讲,变量 `s1` 已被 *迁移* 到变量 `s2` 里了。因此真实发生的事情,就是下图 4-4 显示的那样: +如果咱们在使用其他语言时,听说过 *浅拷贝,shallow copy* 和 *深拷贝,deep copy* 这两个术语,那么拷贝指针、长度和容量,而不拷贝数据的这个概念,可能听起来就像是在构造一份浅拷贝。但是,由于 Rust 还会使第一个变量失效,所以这不叫浅拷贝,而叫 *迁移,move*。在这个例子中,我们会说 `s1` 被迁移到了 `s2` 中。因此,实际发生的情况,如下图 4-4 所示。 + ![在变量 `s1` 失效后内存中的表示](../images/Ch04_04.svg) -*图 4-4:在变量 `s1` 失效后内存中的表示* +*图 4-4:变量 `s1` 被失效后内存中的表示* + 这就解决了问题!在只有 `s2` 有效之下,当变量 `s2` 超出作用域后,那么就只有他会释放内存,于是就解决了双重内存释放问题。