Refining Ch04.

This commit is contained in:
Peng Hailin, 2023-12-12 21:58:56 +08:00
parent de725f1230
commit 73d1310b76

View File

@ -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` 超出作用域后,那么就只有他会释放内存,于是就解决了双重内存释放问题。