面试题答案
一键面试-
所有权转移描述:在Rust中,当一个拥有所有权的变量作为参数传递给函数时,所有权会从调用者转移到被调用函数。这意味着调用者不再拥有该变量的所有权,被调用函数成为新的所有者。当函数结束时,该变量(如果没有进一步转移所有权)会被销毁,内存被释放。
-
代码示例:
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
)被销毁。
- 函数返回值对所有权的影响:当函数返回一个拥有所有权的变量时,所有权从被调用函数转移到调用者。例如:
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
函数就拥有了这个字符串的所有权,并可以继续使用它。