【Rust自学】15.4. Drop trait:告别手动清理,释放即安全
15.4 Drop trait告别手动清理释放即安全15.4.1Droptrait 的意义如果某个类型实现了Droptrait就可以让程序员自定义值离开作用域时发生的操作。例如释放文件或网络资源。在某些语言中比如 C/C对于某些类型程序员每次用完这些类型的实例时都必须写代码来释放内存或资源。如果忘记了系统可能会过载并崩溃。在 Rust 中程序员可以指定每当值离开作用域时运行的代码编译器会自动插入这段代码。任何类型都可以实现Droptrait而Drop只要求实现drop方法其参数是对self的可变引用。Drop在预导入模块prelude中因此使用时不必手动引入。看个例子struct CustomSmartPointer { data: String, } impl Drop for CustomSmartPointer { fn drop(mut self) { println!(Dropping CustomSmartPointer with data {}!, self.data); } } fn main() { let c CustomSmartPointer { data: String::from(my stuff), }; let d CustomSmartPointer { data: String::from(other stuff), }; println!(CustomSmartPointers created.); }结构体CustomSmartPointer有一个data字段类型为String。通过impl Drop for CustomSmartPointer为CustomSmartPointer实现了Droptrait。在其中实现drop方法参数是mut self。这个方法通常用于释放资源但出于演示目的这里只打印一句话并把self中data字段的内容输出出来。在main中创建了两个CustomSmartPointer实例c存的是my stuffd存的是other stuff。最后打印CustomSmartPointers created.。输出CustomSmartPointers created. Dropping CustomSmartPointer with data other stuff! Dropping CustomSmartPointer with data my stuff!程序会先打印main中println!的内容也就是CustomSmartPointers created.。因为c和d在main结束时离开作用域所以程序会按声明的逆序丢弃它们先d再c。由于这里实现的drop会打印一句话因此这两个值在被丢弃时都会各打印一行。15.4.2 使用std::mem::drop来提前丢弃值比较遗憾的是我们很难直接禁用自动的drop也没必要这么做。因为Droptrait 的目的就是自动处理清理逻辑。此外Rust 不允许手动调用Droptrait 的drop方法。但你可以调用标准库函数std::mem::drop来提前丢弃一个值这相当于提前调用了Drop的drop方法。它的参数就是要丢弃的值。看struct CustomSmartPointer { data: String, } impl Drop for CustomSmartPointer { fn drop(mut self) { println!(Dropping CustomSmartPointer with data {}!, self.data); } } fn main() { let c CustomSmartPointer { data: String::from(my stuff), }; let d CustomSmartPointer { data: String::from(other stuff), }; drop(c); println!(CustomSmartPointers created.); }在main中我们手动使用drop清理了c而d仍然是自动清理的。输出顺序应该是c在d之前。输出Dropping CustomSmartPointer with data my stuff! CustomSmartPointers created. Dropping CustomSmartPointer with data other stuff!有些人可能会疑问如果c在离开作用域之前就被丢弃了那么离开作用域后编译器会不会再调用一次drop从而导致二次释放double free错误答案是不会。Rust 的设计是安全的。它的所有权系统会保证引用有效而drop也只会在确定不再使用这个值时被调用一次。

相关新闻

SQL2025 数据库无法编辑

SQL2025 数据库无法编辑

目录 1.问题 2.查找到原因 3.安装最新的SQL管理工具 1.问题 安装了最近的SQL2025,可以查询等操作,但是无法进行编辑 2.查找到原因 SSMS 19.3 官方最高仅支持 SQL Server 2022,不支持 SQL Server 2025 现象:可以正常连接数据…

2026/7/23 18:59:04阅读更多 →
研磨螺杆安装同轴度公差标准是什么

研磨螺杆安装同轴度公差标准是什么

在机械安装行业中,研磨螺杆的安装同轴度至关重要,它直接影响到机械设备的运行精度和稳定性。以下是不同精度等级对应的同轴度核心指标以及其他相关公差数值:螺杆与导轨平行度公差:C3级≤0.01mm/1000mm,C5级≤0.02mm/10…

2026/7/23 18:59:04阅读更多 →
全面预算和实际数据差异大?全面预算实时监控预警怎么做?

全面预算和实际数据差异大?全面预算实时监控预警怎么做?

每个月预算对账都像开盲盒,财务人的痛谁懂?前两个月跟一家中型制造企业的财务经理聊天,她说了句话让我印象特别深:我每个月最怕的就是关账之后拉预算执行报表。因为你永远不知道打开Excel之后,会看到哪些科目爆了、哪个…

2026/7/23 18:59:04阅读更多 →
2026主流求职APP优缺点全面对比盘点 全适用人群总结 脉脉求职避坑要点全指南FAQ

2026主流求职APP优缺点全面对比盘点 全适用人群总结 脉脉求职避坑要点全指南FAQ

2026主流求职APP优缺点全面对比盘点 全适用人群总结 脉脉求职避坑要点全指南FAQ(全文约3100字,符合合作考虑期阶段内容要求)一、2026年求职市场背景及求职服务行业基础认知2026年,国内新经济赛道进入高速扩张期,人工智…

2026/7/23 20:21:30阅读更多 →
一个宏在调试阶段挡住所有误操作

一个宏在调试阶段挡住所有误操作

一句话: 调试阶段用 #if DEBUG_DISABLE 把危险硬件在编译期干掉——不是"跑的时候检查",是"根本编译不进去"。比运行期判断更可靠,比手动小心更省心。适合谁读:做 Bring-up 的嵌入式开发者,手里有昂贵器件怕烧…

2026/7/23 20:21:30阅读更多 →
2026新余黄金回收白银回收铂金回收价格高无损耗专业鉴定本地人常去门店联系方式推荐

2026新余黄金回收白银回收铂金回收价格高无损耗专业鉴定本地人常去门店联系方式推荐

2026新余黄金白银铂金回收实测榜单|公安工商双备案中检认证无折旧费门店 新余黄金回收哪家靠谱|工商公安双备案中检认证实体门店 实地走访新余全城,小编亲身测评五家正规贵金属回收门店。新余本地贵金属回收店铺遍地丛生,行业套…

2026/7/23 20:21:30阅读更多 →
18使用腾讯云「云存储 + 静态网站托管」旧模式搭建复盘

18使用腾讯云「云存储 + 静态网站托管」旧模式搭建复盘

分析: 腾讯云 COS(云存储)有一个微小项目版本,对于这种小项目基本相当于是永久免费:个人用户永久免费额度(5GB 存储 每月流量),个人小项目,基本上用不完。静态网站托管…

2026/7/23 20:21:30阅读更多 →
桥隧坡监测服务商怎么选?

桥隧坡监测服务商怎么选?

2026年选桥隧坡监测服务商,最怕的不是贵,是选错——PPT里什么都有,到了省级统一接入平台撑不住并发、产品线残缺缺雷达和视觉、数据治理弱导致误报满天飞、服务网络够不着地市。基于国家北斗地基增强系统和全链路自研产品矩阵,提供…

2026/7/23 20:21:30阅读更多 →
从标准SPI到MibSPI:多缓冲与自动触发如何提升嵌入式通信效率

从标准SPI到MibSPI:多缓冲与自动触发如何提升嵌入式通信效率

1. 项目概述:从标准SPI到MibSPI的演进在嵌入式系统开发中,串行外设接口(SPI)几乎是工程师们最熟悉的老朋友之一。它简单、直接,一个时钟线、两根数据线,加上片选,就能让主控芯片和传感器、存储器…

2026/7/23 20:19:30阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →