面试题答案
一键面试Rust语言借用的三条核心规则
- 同一作用域内,不可同时存在可变借用和不可变借用:一个数据资源在同一时间要么有一个可变借用,要么有多个不可变借用,但不能同时存在可变和不可变借用。
- 借用的生命周期必须小于等于被借用数据的生命周期:借用的数据不能比它所借用的源数据存活时间更长,否则会导致悬空指针。
- 可变借用必须唯一:在任何给定时间,只能有一个可变借用指向数据,这确保对数据的修改是唯一的。
举例说明防止数据竞争保障安全性
fn main() {
let mut num = 5;
// 尝试同时创建可变和不可变借用,会编译错误
// let r1 = #
// let r2 = &mut num;
// 符合规则的不可变借用
let r1 = #
let r2 = #
println!("r1: {}, r2: {}", r1, r2);
// 符合规则的可变借用
let mut r3 = &mut num;
*r3 = 6;
println!("r3: {}", r3);
// 尝试创建第二个可变借用,会编译错误
// let r4 = &mut num;
}
在上述代码中,若尝试同时创建可变和不可变借用,或创建多个可变借用,编译器会报错,从而防止数据竞争。借用的生命周期规则也确保了在源数据被释放后,不会有悬空指针访问该数据,进而保障了安全性。