rust - Rust 中的浅复制和移动

标签 rust language-concepts

Rust 是否可能有浅拷贝,因为看起来移动会取代浅拷贝?

最佳答案

您必须根据基础类型进行区分。

您无法对 struct Foo(String); 进行浅拷贝因为 Foo 的两个实例会指向完全相同的 String ,这将违反 strict aliasing rule .

但是,如果您有引用计数器,例如struct Foo(Rc<String>);这是可能的,因为 Rc 会阻止您做不安全的事情,例如当 String 上有其他引用时,具有可变引用.

对于实现 [ Clone 的类型也是可能的] 制作“浅”副本,因为 Copy意味着可以使用 memcpy 复制该类型(例如 u32&T )。

What is the difference between Copy and Clone?也非常值得一读。


因此,一般来说不会:异常是引用计数结构( Rc Arc )、 Cloneables ,或引用 ( &T ),因为它们不违反严格的别名规则。

关于rust - Rust 中的浅复制和移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53257404/

相关文章:

enums - 将类型组合到枚举时如何从特征返回引用

rust - 如何在Rust WASM中将JsString转换为&str

python - 生成器中存储的 'elements' 在哪里?

c - 为什么我们在 C 中有 unsigned 和 signed int 类型?

enums - 有没有办法在没有模式匹配的情况下直接访问枚举结构中的字段值?

random - 如何随机选择格式字符串

rust - 有条件地创建向量时如何正确满足借用检查器

javascript - 为什么回调函数允许我们在 Javascript 中异步执行操作?

Delphi - 我该如何改进