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

rust语言学习笔记(指针一)Box<T>(堆分配,独占所有)

把一个值放到堆上,并由一个唯一所有者管理它。

1.1Box<T>特点:

(1)堆分配

(2)唯一所有权

(3)单线程

1.2 自动解引用

Box<T>实现了Deref,支持自动解引用操作,比如*y

letx=5;lety=Box::new(x);assert_eq!(5,*y);

1.3Box<T>用途:

1.3.1 无法确定大小的值(递归类型)

#[derive(Debug)]enumList{Cons(i32,Box<List>),Nil,}fnmain(){letlist=List::Cons(1,Box::new(List::Cons(2,Box::new(List::Nil))));println!("{:?}",list);}

1.3.2 运行时多态(trait object)

traitMyPrint{fnprint(&self);}structm1{}implMyPrintform1{fnprint(&self){println!("m1");}}structm2{}implMyPrintform2{fnprint(&self){println!("m2");}}fnmain(){letml:Vec<Box<dynMyPrint>>=vec![Box::new(m1{}),Box::new(m2{})];foriinml{i.print();}}

1.3.3 大对象移动

// 定义一个大结构体,使用 Vec 存储数据以避免栈溢出#[derive(Debug)]structBigData{buffer:Vec<u8>,// 使用 Vec 在堆上存储数据}implBigData{fnnew(size:usize)->Self{Self{buffer:vec![0;size],// Vec 初始化直接在堆上分配}}}// 该函数获取 Box 的所有权fnprocess_data(data:Box<BigData>){println!("数据处理中,缓冲区大小: {} bytes",data.buffer.len());// 当函数结束时,data 离开作用域,Box 自动释放堆上的内存}fnmain(){// 1. 在堆上分配大对象// Box::new 会将 BigData 移动到堆上,main 函数的栈上只保留一个指针letmy_data=Box::new(BigData::new(1024*1024));// 1 MBprintln!("准备移动大对象...");// 2. 移动所有权// 这里发生的是"移动"而非"拷贝"。// 仅拷贝了栈上的指针(8字节),而不是拷贝 1MB 的数据。// my_data 在此之后不再有效。process_data(my_data);// println!("{:?}", my_data.buffer.len()); // 编译错误!my_data 的所有权已移走}
http://www.jsqmd.com/news/1104292/

相关文章:

  • ub-dhcp与BIND集成:动态DNS更新的完整实现指南
  • YOLOv10模型改进-注意力机制-第37篇:YOLOv10改进策略【注意力机制】| ECANet注意力机制
  • Vision Master通信管理(一)
  • 深入解析 diff-cover:精准定位代码变更测试覆盖率的架构实践
  • Python LanceDB 超全实战教程(零基础入门到AI向量检索生产级落地)
  • 最大似然估计(MLE)
  • 3PEAK思瑞浦 TPA158B2-S5TR-S SOT23-5 电流信号检测放大器
  • 桑迪亚实验室 SA3000:抗辐射 8085 处理器,性能远超设计目标!
  • 现在有没有能让仓库实现全自动化管理的方案?
  • 激光切割机 OEM/ODM 代工贴牌靠谱源头厂
  • 终极图像修复指南:用Resynthesizer让GIMP拥有AI级纹理合成能力
  • Qwen 3.6 27B:本地开发理想之选,性能强劲可本地微调!
  • 【金蝶云星空】生产退料单的五种场景,成本都是如何取值的?
  • NifSkope终极指南:如何高效编辑游戏3D模型文件格式
  • AI科技热点日报 | 2026年07月01日
  • 银行金融机构操作系统安全:双因素认证从合规要求到实战落地
  • 【小白也能轻松玩转龙虾】虾壳云一键部署零基础全解,从零搭建 OpenClaw v2.7.9 本地 AI 智能体(附最新安装包)
  • 基于深度学习的手势识别系统的设计与实现
  • 如何构建企业级工作流系统:RuoYi-Flowable-Plus架构设计与实施指南
  • 4.添加硬盘、分区、格式化、挂载
  • 抖音评论数据采集神器:3分钟零代码获取完整评论分析
  • 对于扫描的PDF文档
  • 【边界心法】别用 if 语句防撞!撕碎“软件限位”的逻辑幻觉,论传感器的背叛与“机械死挡块”的绝对物理防线
  • 【空间心法】别把局部变量当免费空气!撕碎“无限栈”的软件幻觉,论 LwIP 的无声瘫痪与 MPU 物理栈守卫
  • 今日直播复盘
  • 70.纸上的光
  • 本地可控 AI 自动化工具 OpenClaw 实操指南,多场景办公任务自动执行(含安装包)
  • ChatGPT Plus 续费失败怎么办?到期、回到 Free、原支付方式失效怎么办
  • Tidal 公布 AI 音乐新政策:标注、禁货币化,与竞品共应对 AI 音乐涌入
  • 智谱AI发布GLM - 5.2,能力逼近美国模型引美政府担忧,开放权重或存滥用风险