Rust 中的复制和克隆之间的区别是什么?

Fin*_*ber 1 rust

我试图理解RustCloneCopyRust 之间的区别。谷歌搜索我看到的答案似乎可以归结为:Clone专为任意重复而设计,而Copy代表可以通过memcpy.

所有这些答案的问题在于所有参考都memcpy假设读者知道什么memcpy

但对于像我这样不确定的人来说,memcpy因为我没有 C/C++ 经验,所以不确定这如何帮助解释复制和克隆之间的区别。

有人可以帮助解释复制memcpy和克隆之间的区别吗?特别是如何提及它?

Kon*_*lph 5

memcpy是复制字节缓冲区的低级系统函数。在伪代码中,memcpy执行以下操作:

\n
memcpy(to, from, size):\n  for i from 0 to size:\n    to[i] = from[i]\n
Run Code Online (Sandbox Code Playgroud)\n

也就是说,它实际上是从一个内存位置到另一个固定长度的简单、逐元素的字节副本。但它\xe2\x80\x99s 的实现非常高效。如果一个类型是memcpy-able 的,则意味着它的内存表示不包含依赖于其内存位置的逻辑。也就是说,一旦对象被复制或移动到不同的内存地址,它仍然有效。

\n

i32对于或 等类型来说也是如此f64。但对于向量来说,情况并非如此,因为向量通常被实现为大小、容量和指向另一个缓冲区的指针。如果我们通过 复制向量memcpy,新对象中的该指针现在仍然指向旧对象\xe2\x80\x99s 缓冲区。这\xe2\x80\x99s为什么i32等实现了Copy,但std::vec::Vec没有。

\n