面试题答案
一键面试实现Clone trait进行深拷贝的基本条件
- 成员类型实现Clone trait:自定义结构体的所有成员类型都必须实现
Clone
trait。因为Clone
的实现依赖于结构体成员的Clone
能力,只有成员类型都能克隆,结构体整体才能正确克隆。这是因为在Clone
实现中,需要对每个成员进行克隆操作。 - 递归实现:如果结构体成员本身是复杂类型,包含其他结构体或集合,这些内部结构体或集合的成员也都要实现
Clone
trait ,从而确保整个数据结构能递归地进行深拷贝。
包含Box类型成员时实现Clone trait以达成深拷贝
假设定义如下包含Box
类型成员的结构体:
struct MyStruct {
data: Box<i32>
}
要实现Clone
trait 达成深拷贝,可以这样做:
impl Clone for MyStruct {
fn clone(&self) -> MyStruct {
MyStruct {
data: self.data.clone()
}
}
}
这里Box<T>
实现了Clone
trait ,self.data.clone()
会克隆Box
所指向的数据,并返回一个新的Box
,这样就完成了对Box
类型成员的深拷贝,从而整个MyStruct
结构体也就实现了深拷贝。