Re: [閒聊] Rust: 從入門到入門

作者: yam276 ('_')   2025-03-21 18:14:55
: 從入門到入門
繼續借用與所有權
1. 隱式解引用
隱式可以一次到位
let r: &Box<i32> = &x;
顯式解引用是這樣 有兩層要打兩個*
let r_abs1 = i32::abs(**r);
但隱式解引用可以直接用
let r_abs2 = r.abs();
2. 一個變數不能同時有別名+可變性
有機會造成Double Free、Race Condition、數值失效
所以可變變數只能用所有者變數(或可變借用)來修改
3. Vec的新分配空間
let v: Vec<i32> = vec![1, 2, 3];
let n: &i32 = &v[2]; // 引用v[2]
此時如果
v.push(4);
n會直接失效
因為Vec會把原本的Heap釋放
重新建立一個新的大小的Heap來儲存新資料
4. 變數的權限
一個變數有三種權限:Read(R)、Write(W)、Ownership(O)
當變數被借用的時候
原本持有的所有權(O)會被借用者拿走 直到借用結束
此時原持有者只擁有Read的權力
5. 可變借用
let x = 0;
let mut x_ref = &x;
此時x_ref擁有R W O 可以修改
而x僅剩下R的權力
但要注意的是如果要使用解引用: *x_ref
此時 *x_ref 解出來的引用是 x 而非 x_ref
因此 *x_ref 只能 Read 不能修改

Links booklink

Contact Us: admin [ a t ] ucptt.com