文章

详细理解关于 Rust 的 Copy、Clone 机制

结合生命周期标注,理解复杂场景下 clone、copy 的作用,内部原理细节

发现在使用了 Copy 这个 Trait 之后,原本会提示的 value moved,不再会报错了。 Copy 的作用类型和特点:

  • 按值复制
  • 不需要显式 clone
  • 零成本复制(复制是按照位来进行的,开销很低,适合简单,轻量的类型(如数值类型与指针))

Copy 的使用条件:

  • 类型中所有的字段都应该实现了 Copy
  • 类型中不能包含动态内存,如 String 与 Vec,因为复制这些类型需要 Deep Copy
  • 类型不能实现 Drop Trait

Rust 会为下面这些类型自动实现 Copy

  • 所有的标量类型 i32, f64, char, bool
  • 固定大小的切片 [u8; 4]
  • 没有包含非 Copy 字段的元组 (i32, u8)
本文由作者按照 CC BY 4.0 进行授权