当前位置: 首页 > 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.gsyq.cn/news/1616264.html

相关文章:

  • YOLOv10模型改进-注意力机制-第37篇:YOLOv10改进策略【注意力机制】| ECANet注意力机制
  • ub-dhcp与BIND集成:动态DNS更新的完整实现指南
  • Python LanceDB 超全实战教程(零基础入门到AI向量检索生产级落地)
  • AI科技热点日报 | 2026年07月01日
  • 【边界心法】别用 if 语句防撞!撕碎“软件限位”的逻辑幻觉,论传感器的背叛与“机械死挡块”的绝对物理防线
  • 对于扫描的PDF文档
  • ChatGPT Plus 续费失败怎么办?到期、回到 Free、原支付方式失效怎么办
  • PS 图层批量导出 PDF 工具脚本
  • Tidal 公布 AI 音乐新政策:标注、禁货币化,与竞品共应对 AI 音乐涌入
  • 精确计时与时钟频率合成器CS2200-CP在嵌入式系统中的应用
  • Kiran-shell 性能优化:面板响应速度与内存管理的10个技巧
  • 如何解决区域创新资源分布不清的问题?
  • 【MATLAB】STM32低功耗控制策略建模与仿真实现
  • 大模型性能提升40%的真相:五维协同优化与工程落地指南
  • 【MATLAB】无人机集群队形缩放控制算法
  • 使用一个json文件来描述我们的战场
  • 【AI大模型】代码入门:批量调用API的极简Python脚本
  • 新手向 OpenClaw 部署实操,图形化工具完成本地智能体环境搭建(包含安装包)
  • 手机屏幕保护膜的光学性能测试方法与标准研究——以悟赫德护景贴观复盾的测试体系为例
  • 2026年房地产动画服务行业选购指南
  • 2026年AI生成文献综述哪家强?PaperRed与笔捷AI、ChatGPT实测对比
  • VDExplainer:让漏洞检测模型“说清楚”,逐语句解释漏洞从何而来
  • 一人公司必备AI工具:5分钟将详情页变废为宝,产出高转化社媒图文
  • YOLOv10模型改进-注意力机制-第38篇: YOLOv10改进策略【注意力机制】| ShuffleAttention注意力机制
  • macOS百度网盘性能优化架构解析:动态库注入与限速破解技术实现
  • C++ STL 简介:从标准模板库到开发利器
  • 猪场保温灯总坏?这款设备全项达标头部集团招标标准,已服务上千家猪场!
  • 英伟达收购LeptonAI一年后贾扬清离职,开源承诺搁置或是主因
  • Three.js 随机城市白膜教程
  • 2026年大模型“开源海啸”下,锥形语言模型零成本提升性能!