面试题答案
一键面试func1
到func2
的所有权转移:- 在Rust中,当一个变量作为参数传递给函数时,所有权会转移到被调用的函数中。
- 当
func1
创建一个String
类型变量s
并传递给func2
时,func1
不再拥有s
的所有权,func2
获得了s
的所有权。
func2
到func3
的所有权转移:- 同理,当
s
在func2
中被传递给func3
时,func2
不再拥有s
的所有权,func3
获得了s
的所有权。
- 同理,当
以下是代码示例:
fn func1() {
let s = String::from("hello");
func2(s);
// 这里不能再使用s,因为所有权已经转移给func2
// println!("{}", s); // 这行代码会报错
}
fn func2(s: String) {
func3(s);
// 这里不能再使用s,因为所有权已经转移给func3
// println!("{}", s); // 这行代码会报错
}
fn func3(s: String) {
println!("func3 received: {}", s);
// s在func3函数结束时被释放
}
在上述代码中,func1
创建字符串s
并传递给func2
,func2
再将s
传递给func3
,每次传递所有权都发生转移,原所有者失去对该变量的所有权。