面试题答案
一键面试在注释处添加 println!("{}", s);
代码会报错,错误信息大致为 use of moved value:
s``。
原因是在Rust中,String
类型的数据在传递给 take_ownership
函数时,发生了所有权转移。take_ownership
函数获取了 s
的所有权,当函数结束时,s
所指向的内存会被释放。在 main
函数中,s
的所有权已经被转移走,所以在所有权转移之后再尝试使用 s
就会导致错误,因为 s
已经不再拥有之前分配的内存的所有权。这种机制保证了Rust内存安全,避免了悬空指针和双重释放等问题。