Rust 的 clone 与 to_owend 方法的区别
Rust 的 clone 与 to_owend 方法的区别
在 Rust 中,在遇到需要复制的情况时,需要调用 clone() 或 to_owend() 方法,但是这两个方法有联系和差别。
clone() |
to_owend |
|
|---|---|---|
T |
T ➡ T |
T ➡ T |
&T |
&T ➡ &T |
&T ➡ T |
// 这里为 String 类型,两个方法都进行了复制,
// 大部分情况,to_owend方法在内部通过调用clone实现
let s: String = String::from("Hello");
let s_clone: String = s.clone();
let s_owend: String = s.to_owned();
// 引用类型,Rust为所有的不可变引用实现了Copy、Clone特性,
// 不可变引用的复制和克隆的效果都是一样,只获得了引用,没有所有权
// to_owend方法,内部通过 &T 调用 T 的clone方法获得原始数据的拷贝
let s: &str = "Hello";
let s_clone: &str = s.clone();
let s_owend: String = s.to_owned();
总的来说,就是在需要得到原始数据的拷贝,但是传进的参数是引用类型,如果调用 clone() ,只是将引用复制一遍,需用通过 to_owend() 拷贝原始数据获得所有权。

浙公网安备 33010602011771号