Rust中Copy和Clone特质有什么区别?
大家好!我是Rust新手,正在尝试理解内存管理。我读过关于Copy和Clone特质的内容,但不太明白它们之间的区别。文档中说Clone是“深拷贝”,而Copy是“简单的按位拷贝”。但在实践中,我看到了一些奇怪的行为。
下面是一个让我困惑的例子:
```rust
#[derive(Copy, Clone)]
struct Point {
x: i32,
y: i32,
}
#[derive(Clone)]
struct Line {
start: Point,
end: Point,
}
fn main() {
let p1 = Point { x: 1, y: 2 };
let p2 = p1; // Copy生效了吗?
println!("{:?} {:?}", p1, p2); // 可以工作!
let l1 = Line {
start: Point { x: 0, y: 0 },
end: Point { x: 5, y: 5 }
};
let l2 = l1; // 错误!发生了move
// println!("{:?} {:?}", l1, l2); // 无法编译
}
```
为什么Point可以使用Copy,而Line不行,尽管Line内部使用了带有Copy的Point?如何正确选择使用Copy还是Clone?