面试题答案
一键面试- 思路:
- Rust中,
Vec
类型本身已经实现了高效的内存管理。Vec
采用了写时复制(Copy - on - Write,COW)的思想,在很多情况下可以避免不必要的内存复制。 - 对于
MyData
结构体,当进行复制操作时,我们希望复用Vec
的这种特性。如果直接让MyData
实现Copy
语义,这意味着每次复制MyData
时都会复制其内部的Vec
,这会导致性能问题。因此,我们应该让MyData
实现Clone
语义,Clone
方法可以按需进行深拷贝(如果需要修改数据)。
- Rust中,
- 关键代码片段:
struct MyData {
data: Vec<i32>
}
impl Clone for MyData {
fn clone(&self) -> Self {
MyData {
data: self.data.clone()
}
}
}
在上述代码中:
- 定义了
MyData
结构体,它包含一个Vec<i32>
类型的成员data
。 - 为
MyData
实现了Clone
特性,在clone
方法中,对self.data
调用clone
方法,这会按需进行深拷贝。如果在复制后不需要修改数据,那么Vec
可以共享底层内存,从而避免不必要的内存复制。同时,Vec
本身的clone
方法已经进行了优化,在需要深拷贝时也是高效的。