面试题答案
一键面试struct User {
name: String,
age: i32,
}
fn modify_name_length(user: &mut User) -> usize {
user.name.push_str(" modified");
user.name.len()
}
借用规则体现
- 可变借用唯一性:函数
modify_name_length
接收User
的可变引用&mut User
。在Rust中,对于一个特定的作用域,同一时间只能有一个可变借用。这确保了在修改name
时,不会有其他代码同时访问或修改User
实例,避免数据竞争。 - 借用生命周期:可变引用
user
的生命周期与函数modify_name_length
的调用周期一致。一旦函数返回,借用结束,User
实例的所有权交回调用者,符合Rust中借用的生命周期规则。
遵循规则与内存模型
Rust内存模型旨在通过编译器检查确保内存安全,避免诸如悬空指针、数据竞争等常见的内存错误。遵循借用规则,能保证在任何时刻,内存中的数据要么只能被一个可变引用访问(用于修改),要么可以被多个不可变引用访问(用于读取),但绝不可能同时存在可变和不可变的引用。这使得编译器可以在编译期分析和验证内存访问的安全性,从而在运行时无需垃圾回收机制也能保证内存安全。