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