Copy和Clone有什么不同?

这个问题似乎暗示它只是一个实现细节( memcpy vs ???),但我找不到任何明确的描述差异。

Clone是为任意重复而devise的:typesTClone实现可以执行任意复杂的操作来创build新的T 这是一个正常的特征(除了在前奏之外),所以需要像正常的特征一样使用方法调用等。 Copy特征表示可以通过memcpy安全地复制的值:诸如重新分配和传递参数一个函数的值总是memcpy ,所以对于Copytypes,编译器明白它不需要考虑这些动作 。

主要区别是克隆是明确的。 隐式符号表示移动到非Copytypes。

 // u8 implements Copy let x: u8 = 123; let y = x; // x can still be used println!("x={}, y={}", x, y); // Vec<u8> implements Clone, but not Copy let v: Vec<u8> = vec![1, 2, 3]; let w = v.clone(); //let w = v // This would *move* the value, rendering v unusable. 

顺便说一句,每个Copytypes也需要Clone 。 但是,他们不需要做同样的事情! 对于您自己的types, .clone()可以是您select的任意方法,而隐式复制将始终触发memcpy ,而不是clone(&self)实现。