作者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/cn.aspx?n=bbs/Marginalman/M.1742552097.A.605.html
※ 编辑: yam276 (60.248.143.172 台湾), 03/21/2025 18:21:46