MST

星途 面试题库

面试题:Rust浅拷贝和深拷贝代码示例分析

请分析以下Rust代码中浅拷贝和深拷贝的情况,并指出哪些操作是浅拷贝,哪些是深拷贝: ```rust struct Point { x: i32, y: i32, } impl Clone for Point { fn clone(&self) -> Point { Point { x: self.x, y: self.y, } } } fn main() { let p1 = Point { x: 1, y: 2 }; let p2 = p1.clone(); let p3 = p1; } ```
24.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 浅拷贝
    • let p3 = p1; 这是浅拷贝,在Rust中这叫移动(move)。p1的所有权被转移给p3p1在这之后不再可用。这种转移可以看作是一种特殊的“浅拷贝”,因为它没有复制数据,只是转移了对数据的所有权。
  2. 深拷贝
    • let p2 = p1.clone(); 这是深拷贝。因为我们为Point结构体实现了Clone trait,clone方法会创建一个新的Point实例,新实例中的xy字段的值是从p1对应的字段复制过来的,这意味着数据被真正地复制了一份,所以是深拷贝。