mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2024-12-26 21:00:24 +08:00
Refining Ch04.
This commit is contained in:
parent
de725f1230
commit
73d1310b76
@ -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` 超出作用域后,那么就只有他会释放内存,于是就解决了双重内存释放问题。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user