作者yam276 (史萊哲林的優等生)
看板Marginalman
標題Re: [閒聊] Rust: 從入門到入門
時間Fri Mar 21 18:14:55 2025
: 從入門到入門
繼續借用與所有權
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 不能修改
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.143.172 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Marginalman/M.1742552097.A.605.html
※ 編輯: yam276 (60.248.143.172 臺灣), 03/21/2025 18:21:46