Avatar ·

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?