一、所有權規則:
- Rust中的每一個值都有一個所有者(Owner);
- 值在任一時刻有且只有一個所有者;
- 當所有者(變數)離開作用域時,其對應的值被丟棄;
二、Move(轉移)
- 原變數被賦值給其他變數以後,原變數不可用;編譯時已知大小的型別除外;如整型;
- Copy trait; 如果一個值實現了Copy trait; 那麼舊的變數在將其賦值給其他變數以後,仍然可用; 如 數字型別的變數;該規則,打破了所有權轉移規則;
- 編譯時已知大小的型別,都實現了Copy trait;
- 編譯時已知大小的型別,其值儲存在棧上;
- 編譯時已知大小的型別,其值不會被Move;而是被Copy;故而原變數仍然可用;
- 編譯時不確定大小的型別,其值儲存在堆上;變數被賦給其它值後,原變數被不可用,被Move了;
三、所有權與函式
原理同變數賦值;
四、所有權與返回值
原來同變數賦值;
五、引用&與借用
- 引用不擁有值;故而,引用沒有所有權;
- 將建立一個引用的行為稱為借用(borrowing);
- 引用於可變引用與不可變引用
- 可以同時擁有多個不可變引用
- 只能有一個可變引用
- 有可變引用的同時,不能有不可變引用
- 懸垂引用,Rust 編譯器確保不會有懸垂引用;因為當你擁有一個資料的引用時;編譯器會確保資料不會在引用之前離開作用域;
六、slice
- slice 是一種不可變引用,故而其沒有所有權;