Copy和Clone有什么不同?
这个问题似乎暗示它只是一个实现细节( memcpy
vs ???),但我找不到任何明确的描述差异。
Clone
是为任意重复而devise的:typesT
的Clone
实现可以执行任意复杂的操作来创build新的T
这是一个正常的特征(除了在前奏之外),所以需要像正常的特征一样使用方法调用等。 Copy
特征表示可以通过memcpy
安全地复制的值:诸如重新分配和传递参数一个函数的值总是memcpy
,所以对于Copy
types,编译器明白它不需要考虑这些动作 。
主要区别是克隆是明确的。 隐式符号表示移动到非Copy
types。
// 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.
顺便说一句,每个Copy
types也需要Clone
。 但是,他们不需要做同样的事情! 对于您自己的types, .clone()
可以是您select的任意方法,而隐式复制将始终触发memcpy
,而不是clone(&self)
实现。