MST

星途 面试题库

面试题:Rust 集合所有权转移的基础场景分析

在Rust中,定义一个包含字符串的`Vec<String>`集合,将这个集合传递给一个函数,在函数内部打印集合中的元素。请解释集合所有权是如何转移的,并编写完整的代码示例。
18.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

代码示例

fn print_strings(vec: Vec<String>) {
    for s in vec {
        println!("{}", s);
    }
}

fn main() {
    let mut string_vec = Vec::new();
    string_vec.push(String::from("Hello"));
    string_vec.push(String::from("World"));

    print_strings(string_vec);
    // 这里不能再使用 string_vec,因为所有权已转移给 print_strings 函数
}

所有权转移解释

  1. main 函数中创建了 string_vec,这是一个 Vec<String> 集合,此时 string_vec 拥有这些字符串的所有权。
  2. 当调用 print_strings(string_vec) 时,string_vec 的所有权被转移到 print_strings 函数中的 vec 参数。这意味着 main 函数不再拥有 string_vec 的所有权。
  3. print_strings 函数内部,vec 拥有这些字符串的所有权,并可以对其进行操作,例如打印。
  4. print_strings 函数结束时,vec 及其包含的字符串被销毁,释放内存。由于所有权已经转移,main 函数不能再访问 string_vec,如果尝试访问会导致编译错误。