Rust的变量所有权
所有权
每个值都且只有一个所有者(是一个变量)。
当这个变量一旦离开作用域,这个值对应的内存空间将被清除。
所有权的转移
变量间引用
所有权进行转移后,原本变量就不在拥有对这个值的引用
1 | let s1 = String::("hello"); |
利用克隆操作可以解决这个问题,但是会多消耗一份空间,而且两个值是独立的。
1 | let s2 = s1.clone() |
将变量作为函数的参数和返回值
1 | fn main(){ |
1 | fn main(){ |
所有权的借用
由于所有权的来回移动会造成各种问题,所有可以对所有权进行借用,也就是对值引用。
跟指针很像,使用 & + 变量名 来获得引用,不用担心所有权的转移。
但是引用分为不可变引用和可变引用。
不可变引用可以有很多个,类似读锁。
可变引用只能有一个,类似写锁。
当已有引用时,所有的可变引用都无法获取成功,并会报错。
当已有引用时,对所有者变量写操作也都无法成功。