5. 所有权
5.1 什么是所有权
5.1.1 栈(Stack)与堆(Heap)

5.1.2 所有权规则

5.1.3 变量作用域

5.1.4 String 类型
String类型可进行修改,而字符串字面值是不可以的!(区别在于二者对内存的处理,前者在堆中分配内存、后者在栈中分配内存)

5.1.5 内存与分配

5.1.6 变量与数据交互的方式(一):移动(move,直接转移)



5.1.7 变量与数据交互的方式(二):克隆(clone,深复制)


5.1.8 只在栈上的数据:拷贝(对于实现了 Copy trait 的已知大小的类型)

5.1.9 所有权与函数
- 向函数传递值可能会移动或者复制:对于实现了
copytrait 的是复制,否则为转移!

5.1.10 返回值与作用域

5.2 引用与借用
- 在任意给定时间,下面情况只能存在一种:1、要么 只能有一个可变引用;2、要么 只能有多个不可变引用
- 引用必须总是有效的(不能制造悬垂引用)
5.2.1 引用(&ref)



5.2.2 可变引用(&mut ref)



5.2.3 悬垂引用(Dangling References)


5.3 Slice 类型(引用类型,没有所有权)
5.3.1 用 Slice 返回 String 的子串


5.3.2 字符串 Slice



5.3.3 字符串字面值就是 slice(牢记此特性!)

5.3.4 字符串 slice 作为参数(而不是将 String 引用作为参数)
- 传入 slice 作为参数:
my_fn(&my_string[idx1..idx2])

5.3.5 其他类型的 slice





















