MST

星途 面试题库

面试题:Rust复合数据类型嵌套下的内存管理与所有权

假设你有一个结构体`User`,包含`name`(`String`类型)和`age`(`u32`类型)。然后有另一个结构体`Team`,它包含一个`Vec<User>`字段。编写代码实现向`Team`中添加新用户,并且在删除`Team`实例时,确保所有`User`实例占用的内存都能正确释放,同时解释在这个过程中Rust所有权和借用规则是如何起作用的。
20.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

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

struct Team {
    users: Vec<User>,
}

impl Team {
    fn add_user(&mut self, user: User) {
        self.users.push(user);
    }
}

// 当Team实例被删除时,Rust的所有权系统会自动处理内存释放。
// Team拥有users Vec,而Vec拥有其内部的User实例。
// 当Team实例超出作用域时,其析构函数会被自动调用,
// 这个析构函数会递归地调用Vec的析构函数,Vec又会调用每个User的析构函数,
// 从而正确释放所有User实例占用的内存。

// 在add_user方法中,我们使用&mut self表示可变借用,
// 因为我们需要修改Team实例内部的users Vec。
// user参数通过值传递,这意味着user的所有权被转移到了Vec中。