Rust 中的浅拷贝和移动
Shallow Copy and Move in rust
rust 是否有可能有浅拷贝,因为看起来移动会取代浅拷贝?
你必须根据基础类型来区分。
您不能对 struct Foo(String);
进行浅拷贝,因为 Foo
的两个实例会指向同一个 String
,这会违反 strict aliasing rule。
但是,如果您有一个参考计数器,例如struct Foo(Rc<String>);
这是可能的,因为 Rc
会阻止你做不安全的事情,例如具有可变引用,当 String
.
上有其他引用时
实现 [Clone
] 的类型也可以进行 "shallow" 复制,因为 Copy
暗示可以使用 [=18= 复制类型](例如 u32
或 &T
)。
也很值得一读
所以,一般来说没有:例外是引用计数结构(Rc
或 Arc
),Cloneables
,或引用 (&T
),因为它们不违反严格的别名规则。
rust 是否有可能有浅拷贝,因为看起来移动会取代浅拷贝?
你必须根据基础类型来区分。
您不能对 struct Foo(String);
进行浅拷贝,因为 Foo
的两个实例会指向同一个 String
,这会违反 strict aliasing rule。
但是,如果您有一个参考计数器,例如struct Foo(Rc<String>);
这是可能的,因为 Rc
会阻止你做不安全的事情,例如具有可变引用,当 String
.
实现 [Clone
] 的类型也可以进行 "shallow" 复制,因为 Copy
暗示可以使用 [=18= 复制类型](例如 u32
或 &T
)。
所以,一般来说没有:例外是引用计数结构(Rc
或 Arc
),Cloneables
,或引用 (&T
),因为它们不违反严格的别名规则。