MST

星途 面试题库

面试题:Rust所有权转移机制在函数调用中的体现

请描述在Rust中,当一个拥有所有权的变量作为参数传递给函数时,所有权是如何转移的?并通过一段简单代码示例说明,同时阐述函数返回值对所有权的影响。
17.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 所有权转移描述:在Rust中,当一个拥有所有权的变量作为参数传递给函数时,所有权会从调用者转移到被调用函数。这意味着调用者不再拥有该变量的所有权,被调用函数成为新的所有者。当函数结束时,该变量(如果没有进一步转移所有权)会被销毁,内存被释放。

  2. 代码示例

fn main() {
    let s = String::from("hello");
    take_ownership(s);
    // 这里如果再使用 `s` 会报错,因为所有权已经转移给了 `take_ownership` 函数
    // println!("{}", s);
}

fn take_ownership(some_string: String) {
    println!("{}", some_string);
}

在上述代码中,main 函数创建了一个 String 类型的变量 s。然后将 s 传递给 take_ownership 函数,此时 s 的所有权转移给了 take_ownership 函数。take_ownership 函数结束后,some_string(即原来的 s)被销毁。

  1. 函数返回值对所有权的影响:当函数返回一个拥有所有权的变量时,所有权从被调用函数转移到调用者。例如:
fn give_ownership() -> String {
    let s = String::from("hello");
    s
}

fn main() {
    let s = give_ownership();
    println!("{}", s);
}

在这个例子中,give_ownership 函数创建了一个 String 类型的变量 s,并返回 s。此时,s 的所有权从 give_ownership 函数转移到了 main 函数中的 s。这样,main 函数就拥有了这个字符串的所有权,并可以继续使用它。