【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/8/10 19:51:46 阅读更多 →
矩阵账号视频同质化严重,AI 怎么做出差异化内容?

矩阵账号视频同质化严重,AI 怎么做出差异化内容?

一、发现问题:矩阵账号内容同质化导致流量衰退多数电商、MCN运营会搭建多平台、多账号矩阵体系,通过批量发布短视频扩大流量覆盖面。但矩阵运营过程中,普遍存在视频内容高度同质化的问题,多账号发布的视频镜头顺序、内容结构、文案…

2026/8/13 6:09:07 阅读更多 →
ChangeNotifier实现_Flutter在鸿蒙平台实现状态通知机制

ChangeNotifier实现_Flutter在鸿蒙平台实现状态通知机制

作者:付文龙(红目香薰) 仓库地址:https://gitcode.com/feng8403000/FlutterfromBeginnertoAdvancedForHarmonyOS.git 联系邮箱:372699828qq.com 一、ChangeNotifier简介 ChangeNotifier是Flutter自带的可监听对象&am…

2026/8/7 18:25:08 阅读更多 →

最新新闻

基于LLM的AI智能体如何实现自动化科研实验循环

基于LLM的AI智能体如何实现自动化科研实验循环

1. 项目概述:当AI开始“研究”AI 最近在AI圈子里,一个名为 autoresearch 的项目热度悄然攀升。这个由知名AI研究员Andrej Karpathy开源的项目,名字本身就充满了想象力——“自动研究”。我第一次看到这个标题时,脑子里蹦出的第一…

2026/8/14 6:10:01 阅读更多 →
为什么刹车油要2年更换一次?很多车主都不知道!

为什么刹车油要2年更换一次?很多车主都不知道!

很多车主都知道要换机油、换轮胎、换电瓶。但是有一种直接关系到行车安全的重要油液,却经常被忽视——刹车油。甚至不少车主认为:“刹车油又不会少,不换也没关系吧?”事实上,刹车油并不是看液位高低来决定是否更换&…

2026/8/14 6:10:01 阅读更多 →
蛇口城建办:提交混凝土消防图纸前,你缺的可能是一份回弹报告

蛇口城建办:提交混凝土消防图纸前,你缺的可能是一份回弹报告

提交蛇口城建办的混凝土消防图纸被退回,理由写着“结构耐火依据不足”,在我们经手的蛇口辖区项目中,几乎都落在一个缺失件上——带CMA章的既有混凝土回弹检测报告。本文为典型咨询情景再现,人物与对话均属编写示意,不代…

2026/8/14 6:10:01 阅读更多 →
Holehe OSINT - 电子邮件关联账户查询工具

Holehe OSINT - 电子邮件关联账户查询工具

Holehe OSINT - 电子邮件关联账户查询工具 【免费下载链接】holehe holehe allows you to check if the mail is used on different sites like twitter, instagram and will retrieve information on sites with the forgotten password function. 项目地址: https://gitcod…

2026/8/14 6:10:01 阅读更多 →
psrecord核心功能解析:记录、分析与可视化进程资源占用的完整方案

psrecord核心功能解析:记录、分析与可视化进程资源占用的完整方案

psrecord核心功能解析:记录、分析与可视化进程资源占用的完整方案 【免费下载链接】psrecord Record the CPU and memory activity of a process :chart_with_upwards_trend: 项目地址: https://gitcode.com/gh_mirrors/ps/psrecord psrecord是一款轻量级进程…

2026/8/14 6:10:01 阅读更多 →
斩矛剑圣从入门到毕业:一套能看懂、能照抄的物理输出养成路线

斩矛剑圣从入门到毕业:一套能看懂、能照抄的物理输出养成路线

斩矛剑圣从入门到毕业:一套能看懂、能照抄的物理输出养成路线 【免费下载链接】Wotr-BD-LR 正义之怒Wotr主角BD搜集 项目地址: https://gitcode.com/GitHub_Trending/wo/Wotr-BD-LR 同样是剑圣,为什么别人的斩矛一回合三杀、刀刀重击,…

2026/8/14 6:09:01 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →