当前位置: 首页 > news >正文

rust语言学习笔记Trait(一)Copy、Clone(拷贝)

Copy浅拷贝

  • 适用于纯栈上、无堆资源的小型类型
  • 按位复制,仅复制栈上字节,性能开销极低
  • 标记trait,无方法,使用时赋值、传参自动触发
  • 实现Copy必须同时实现Clone,不能与Drop共存
  • 优先使用 Copy 的场景:
    • 类型仅由基本数值、布尔、字符等组成,且大小固定(如PointColor)。
    • 需要频繁传递但不想增加.clone()调用的心智负担。
    • 对性能敏感,希望编译器自动优化为按位复制。

Clone深拷贝

  • 适用于几乎所有类型

  • 复制堆数据,涉及堆分配,性能开销大

  • 普通trait,有clone()方法,使用时需要显式调用clone()方法

  • 独立 trait,不要求Copy,可与Drop共存

  • 必须使用 Clone 的场景:

    • 类型包含StringVec<T>Box<T>等堆分配字段。

    • 需要一份完全独立的副本,修改副本不影响原数据。

    • 类型实现了Drop,有自定义清理逻辑。

    • 需要定制复制过程(例如深拷贝图结构、增加引用计数)。

Copy的使用

1、基本类型直接使用Copy

let x = 5; let y = x; // 自动复制,x 未被移动

2、纯栈上结构体派生Copy

// Copy 只能用于简单类型(所有字段都是 Copy)#[derive(Debug, Clone, Copy)]// 必须同时派生 Clone,因为 Copy trait 的定义要求 Copy: ClonestructPoint{x:i32,y:i32,}letpt1=Point{x:3,y:4};letpt2=pt1;// Copy 自动发生,不用 clone()println!("{:?}",pt1);// ✅ pt1 还能用(因为是 Copy)

Clone的使用

1、标准库类型使用clone()克隆

lets1=String::from("hello");lets2=s1.clone();

2、结构体派生Clone

#[derive(Debug, Clone)]structPerson{name:String,}fnmain(){letp1=Person{name:"张三".to_string(),};letp2=p1.clone();// 显式克隆println!("{:?}",p1);// ✅ p1 还能用}

3、手动实现Clone

#[derive(Debug)]structCounter{id:i32,count:i32}implCloneforCounter{fnclone(&self)->Self{Counter{id:self.id,count:0}// 克隆时重置计数器,非复制原值}}fnmain(){letc1=Counter{id:5,count:88};letc2=c1.clone();println!("{:?}",c1);// Counter { id: 5, count: 88 }println!("{:?}",c2);// Counter { id: 5, count: 0 }}
http://www.jsqmd.com/news/858700/

相关文章:

  • OpCore-Simplify:开源系统硬件适配的自动化配置引擎
  • 如何使用Python和TensorFlow Lite实现高效人脸检测与面部特征分析
  • 通过 curl 命令快速测试 Taotoken 大模型 API 可用性与返回格式
  • 如何突破Switch游戏限制:Ryujinx开源模拟器的5大实战解决方案
  • 安徽GEO优化公司|从技术培训到全案代运营,安徽GEO服务商各司所长 - 行业深度观察C
  • Transparent Background 实战指南:一键式智能背景去除工具深度解析
  • 工业自动化调试实战:OpenModScan解决Modbus协议调试的5大挑战
  • 鲜炖燕窝品牌哪个好:燕口福冻干即食燕窝与传统鲜炖的全面对比 - 新闻快传
  • 如何快速配置Live Server Web Extension:提升开发效率的完整指南
  • 缅甸语语音合成效果断崖式下降?紧急排查ElevenLabs API v2.3.1兼容性漏洞,48小时内必须升级!
  • 2026国产EDA生态适配 数字电源芯片封装设计软件方案推荐及实操要点 - 品牌2025
  • Windows Subsystem for Linux GUI (WSLg) 终极指南:让Linux图形应用在Windows上完美运行
  • 2026深圳贝赛思入学备考机构哪家好?专业培训机构推荐与测评 - 品牌2025
  • 3分钟搞定:在Mac上创建Windows启动盘的终极方案
  • Windows 11 Fixer终极指南:一键优化你的Windows 11系统体验
  • SGLang 未来演进与生态集成:从推理到 Agent 与多模态
  • 如何用RBTray彻底解决Windows任务栏拥挤问题:3种高效窗口管理技巧
  • 【2026亲测】Adobe InCopy下载安装超详细图文教程(附安装包) - sdfsafafa
  • 长春搬家公司选型避坑指南:透明定价、直营团队、企业级服务的2026年深度横评 - 精选优质企业推荐官
  • 2026年苏州专业卫生间漏水维修服务商选型分析:主流合格服务商梳理与适配指南 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • AI写专著的高效途径:使用AI专著生成工具,精准打造20万字专著!
  • Context Engineering 实战:别再往 context 里塞东西了
  • 专访驭势科技CEO吴甘沙:我们选择在巨头射程之外的战场竞争
  • GEO 优化源码(多行业适用)
  • 图片怎么转PDF?2026手机在线方法大全 - 软件小管家
  • QuickLook.Plugin.FolderViewer:如何用空格键实现Windows文件夹零秒预览?
  • 多iTOF相机联合标定:原理、方法与实践
  • 北京雅思培训机构大揭秘:哪家才是你的“上分”神器? - 品牌测评鉴赏家
  • 2026南京旅游亲子游必去博物馆盘点:遛娃看展两不误的宝藏场馆 - 深度智识库
  • 哪家管道清淤检测做得好?优质知名品牌精选 - 品牌推荐大师