- 定义结构体:
- 首先定义一个包含不同类型成员变量的结构体,部分实现
Copy
特征,部分不实现。
- 例如,
String
类型不实现 Copy
特征,而 i32
实现 Copy
特征。
#[derive(Clone)]
struct MyStruct {
id: i32,
name: String,
}
fn main() {
let original_vec = vec![
MyStruct { id: 1, name: "Alice".to_string() },
MyStruct { id: 2, name: "Bob".to_string() },
];
// 深拷贝集合
let copied_vec = original_vec.clone();
// 将数据持久化到文件(这里简单打印,实际可使用文件操作相关库如 std::fs::File)
for item in copied_vec {
println!("id: {}, name: {}", item.id, item.name);
}
}
- 分析:
- 对于结构体
MyStruct
,如果想在集合中进行深拷贝,需要为 MyStruct
派生 Clone
特征。
Clone
特征会递归地对结构体中的所有成员进行克隆。对于实现了 Copy
特征的成员(如 i32
类型的 id
),会进行简单的按位复制;对于未实现 Copy
特征的成员(如 String
类型的 name
),会调用其 clone
方法进行深拷贝。
- 在实际将数据持久化到文件时,可使用
std::fs::File
等相关文件操作库。这里为了简洁,只是简单地打印数据。这样处理既避免了编译错误(通过正确实现 Clone
特征),也避免了内存泄漏(因为深拷贝正确处理了所有权问题,新的拷贝拥有自己独立的内存)。