MST

星途 面试题库

面试题:Rust中函数参数传递方式之所有权转移案例分析

在Rust中,有如下代码: ```rust fn take_ownership(s: String) { println!("I got ownership of: {}", s); } fn main() { let s = String::from("hello"); take_ownership(s); // 在此处添加一行代码,尝试使用s,会发生什么?并解释原因。 } ``` 请完成代码中注释部分,并详细解释为什么会出现这种情况。
44.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

在注释处添加 println!("{}", s); 代码会报错,错误信息大致为 use of moved value: s``。

原因是在Rust中,String 类型的数据在传递给 take_ownership 函数时,发生了所有权转移。take_ownership 函数获取了 s 的所有权,当函数结束时,s 所指向的内存会被释放。在 main 函数中,s 的所有权已经被转移走,所以在所有权转移之后再尝试使用 s 就会导致错误,因为 s 已经不再拥有之前分配的内存的所有权。这种机制保证了Rust内存安全,避免了悬空指针和双重释放等问题。