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