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/