From 97b28476bc9822dd3f0d9e844dd1ef9a54fdfda8 Mon Sep 17 00:00:00 2001 From: sunface Date: Sun, 24 Apr 2022 16:24:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=89=80=E6=9C=89=E6=9D=83?= =?UTF-8?q?=E7=AB=A0=E8=8A=82=E4=B8=AD=E7=9A=84=E4=B8=80=E5=A4=84=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E4=B8=8D=E5=87=86=E7=A1=AE=E7=9A=84=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/basic/ownership/ownership.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/basic/ownership/ownership.md b/src/basic/ownership/ownership.md index c5733f15..f1d1939c 100644 --- a/src/basic/ownership/ownership.md +++ b/src/basic/ownership/ownership.md @@ -75,8 +75,10 @@ int* foo() { 理解了堆栈,接下来看一下*关于所有权的规则*,首先请谨记以下规则: -> 1. Rust 中每一个值都 `有且只有` 一个所有者(变量) -> 2. 当所有者(变量)离开作用域范围时,这个值将被丢弃(drop) +> 1. Rust 中每一个值都被一个变量所拥有,该变量被称之为值的所有者 +> 2. 一个值同时只能被一个变量所拥有,或者说一个值只能拥有一个所有者 +> 3. 当所有者(变量)离开作用域范围时,这个值将被丢弃(drop) + #### 变量作用域 @@ -194,8 +196,9 @@ error[E0382]: use of moved value: `s1` 现在再回头看看之前的规则,相信大家已经有了更深刻的理解: -> 1. Rust 中每一个值都 `有且只有` 一个所有者(变量) -> 2. 当所有者(变量)离开作用域范围时,这个值将被丢弃(drop) +> 1. Rust 中每一个值都被一个变量所拥有,该变量被称之为值的所有者 +> 2. 一个值同时只能被一个变量所拥有,或者说一个值只能拥有一个所有者 +> 3. 当所有者(变量)离开作用域范围时,这个值将被丢弃(drop) 如果你在其他语言中听说过术语 **浅拷贝(shallow copy)** 和 **深拷贝(deep copy)**,那么拷贝指针、长度和容量而不拷贝数据听起来就像浅拷贝,但是又因为 Rust 同时使第一个变量 `s1` 无效了,因此这个操作被称为 **移动(move)**,而不是浅拷贝。上面的例子可以解读为 `s1` 被**移动**到了 `s2` 中。那么具体发生了什么,用一张图简单说明: