Skip to content

Commit 558fbc8

Browse files
committed
修改了四个地方,都是typo
1 parent fc77753 commit 558fbc8

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

12-ownership-system/12-01-ownership.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
**所有权(Owership)**
22
-------------
33
在进入正题之前,大家先回忆下一般的编程语言知识。
4-
对于一般的编程语言,通常会先声明一个变量,然后并初始化它
4+
对于一般的编程语言,通常会先声明一个变量,然后初始化它
55
例如在C语言中:
66
```c
77
int* foo {
@@ -110,7 +110,7 @@ move前后的a和b对应内存的地址不同。
110110
在Rust中,基本数据类型(Primitive Types)均实现了Copy特性,包括i8, i16, i32, i64, usize, u8, u16, u32, u64, f32, f64, (), bool, char等等。其他支持Copy的数据类型可以参考官方文档的[Copy章节](https://doc.rust-lang.org/std/marker/trait.Copy.html "Copy Trait")
111111

112112
### **浅拷贝与深拷贝**
113-
对于上面move String和i32的两个例子的区别,其实很多面向对象编程语言中“浅拷贝”和“深拷贝”的区别。对于基本数据类型磊说,“深拷贝”和“浅拷贝“产生的效果相同。对于引用对象类型来说,”浅拷贝“更像仅仅拷贝了对象的内存地址。
113+
对于上面move String和i32的两个例子的区别,其实很多面向对象编程语言中“浅拷贝”和“深拷贝”的区别。对于基本数据类型来说,“深拷贝”和“浅拷贝“产生的效果相同。对于引用对象类型来说,”浅拷贝“更像仅仅拷贝了对象的内存地址。
114114
如果我们想实现对**String**的”深拷贝“怎么办? 可以直接调用**String**的Clone特性实现对内存的值拷贝而不是简单的地址拷贝。
115115
```rust
116116
{
@@ -180,7 +180,7 @@ pub trait Copy: Clone { }
180180
一旦一种类型实现了Copy特性,这就意味着这种类型可以通过的简单的位(bits)拷贝实现拷贝。从前面知识我们知道“绑定”存在move语义(所有权转移),但是,一旦这种类型实现了Copy特性,会先拷贝内容到新内存区域,然后把新内存区域和这个标识符做绑定。
181181

182182
**哪些情况下我们自定义的类型(如某个Struct等)可以实现Copy特性?**
183-
只要这种类型是属性类型都实现了Copy特性,那么这个类型就可以实现Copy特性。
183+
只要这种类型的属性类型都实现了Copy特性,那么这个类型就可以实现Copy特性。
184184
例如:
185185
```rust
186186
struct Foo { //可实现Copy特性
@@ -231,7 +231,7 @@ fn main() {
231231
}
232232
```
233233
从结果我们发现let mut y = x后,x并没有因为所有权move而出现不可访问错误。
234-
因为Copy特性继承了Clone特性,所以我们均需要手动实现这两个特性。
234+
因为Foo继承了Copy特性和Clone特性,所以我们均需要手动实现这两个特性。
235235

236236

237237
### **高级move**

0 commit comments

Comments
 (0)