- 利用移动语义优化思路:
- 在Rust中,当一个变量被移动时,所有权发生转移,而不是进行复制。对于
Graph
结构体,由于它包含HashMap
、Vec
等数据结构,这些数据结构内部有堆上分配的内存。通过移动语义,我们可以直接将这些堆内存的所有权转移给新的变量,而不是复制堆内存,从而减少不必要的内存分配和复制。
- 大致实现框架:
use std::collections::HashMap;
struct InnerStruct {
data: Vec<i32>,
}
struct Graph {
inner: InnerStruct,
map: HashMap<String, i32>,
}
fn process_graph(graph: Graph) {
// 这里可以对graph进行各种处理,graph的所有权现在在这个函数内
let data = graph.inner.data;
let map = graph.map;
// 处理data和map...
}
fn main() {
let mut graph = Graph {
inner: InnerStruct { data: vec![1, 2, 3] },
map: HashMap::from([("key".to_string(), 42)]),
};
process_graph(graph);
// 这里graph已经被移动,不能再使用graph,因为所有权已转移到process_graph函数内
}