MST

星途 面试题库

面试题:Rust内存模型下的借用规则实际应用

在Rust中,考虑以下场景:你有一个结构体 `User`,包含 `name`(字符串类型)和 `age`(整数类型)。现在你需要实现一个函数,该函数接收 `User` 的可变引用,修改 `name` 的值并返回修改后的 `name` 的长度。请编写代码并解释其中借用规则是如何体现的,以及为什么要遵循这些规则以符合Rust内存模型。
36.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
struct User {
    name: String,
    age: i32,
}

fn modify_name_length(user: &mut User) -> usize {
    user.name.push_str(" modified");
    user.name.len()
}

借用规则体现

  1. 可变借用唯一性:函数 modify_name_length 接收 User 的可变引用 &mut User。在Rust中,对于一个特定的作用域,同一时间只能有一个可变借用。这确保了在修改 name 时,不会有其他代码同时访问或修改 User 实例,避免数据竞争。
  2. 借用生命周期:可变引用 user 的生命周期与函数 modify_name_length 的调用周期一致。一旦函数返回,借用结束,User 实例的所有权交回调用者,符合Rust中借用的生命周期规则。

遵循规则与内存模型

Rust内存模型旨在通过编译器检查确保内存安全,避免诸如悬空指针、数据竞争等常见的内存错误。遵循借用规则,能保证在任何时刻,内存中的数据要么只能被一个可变引用访问(用于修改),要么可以被多个不可变引用访问(用于读取),但绝不可能同时存在可变和不可变的引用。这使得编译器可以在编译期分析和验证内存访问的安全性,从而在运行时无需垃圾回收机制也能保证内存安全。