面试题答案
一键面试- 移动语义表现:
- 在Rust中,当执行
let p2 = p1;
时,p1
的所有权被移动到了p2
。 - 结构体
Point
本身没有实现Copy
trait(默认情况下,只有包含实现了Copy
trait的成员的简单结构体才会自动派生Copy
),所以这里发生的是移动语义。
- 在Rust中,当执行
- 尝试使用
p1
的结果及原因:- 如果在
let p2 = p1;
之后尝试使用p1
,会导致编译错误。 - 原因是所有权已转移给
p2
,p1
不再拥有数据,使用p1
就像使用一个无效的变量,这不符合Rust的内存安全规则。例如,若尝试在之后添加println!("p1 x: {}", p1.x);
,编译器会报错,提示p1
已被移动,无法再使用。
- 如果在