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

对rust的全局变量使用drop方法

文章目录

  • rust处理全局变量的策略
    • 方法1:在main中自动Drop全局变量
  • 参考

rust处理全局变量的策略

Rust 的静态变量不会在程序退出时自动调用 Drop,因为它们的生命周期与进程绑定。

use std::sync::OnceLock;struct GlobalData {content: String,
}impl Drop for GlobalData {fn drop(&mut self) {println!("Cleaning up: {}", self.content);}
}static GLOBAL_DATA: OnceLock<GlobalData> = OnceLock::new();fn main() {GLOBAL_DATA.get_or_init(|| GlobalData {content: "Hello, world!".to_string(),});println!("Program is running...");// When the program exits, the Drop implementation for GlobalData is called.
}
Program is running...

方法1:在main中自动Drop全局变量

全局变量的生命周期应该和main的程序生命周期是一样长的,所以可以在main中创建一个CleanUp局部对象,为CleanUp()实现Drop特征,在Drop()特征中,完成释放全局变量的资源的功能。

struct Cleanup;impl Drop for Cleanup {fn drop(&mut self) {//调用某些全局变量的释放方法 或者 C库中的方法println!("Cleanup executed on program exit.");}
}fn main() {let _cleanup = Cleanup; // The `Drop` method will be called when `_cleanup` goes out of scopeprintln!("Program is running...");
}

测试:

Program is running...
Cleanup executed on program exit.

eg:

use std::sync::OnceLock;struct Cleanup;impl Drop for Cleanup {fn drop(&mut self) {GlobalData::free();println!("Cleanup executed on program exit.");}
}struct GlobalData {content: String,
}impl GlobalData{pub fn free(){println!("GlobalData::free...");}}static GLOBAL_DATA: OnceLock<GlobalData> = OnceLock::new();fn main() {GLOBAL_DATA.get_or_init(|| GlobalData {content: "Hello, world!".to_string(),});let _cleanup = Cleanup; // The `Drop` method will be called when `_cleanup` goes out of scopeprintln!("Program is running...");
}
Program is running...
GlobalData::free...
Cleanup executed on program exit.

参考

相关文章:

对rust的全局变量使用drop方法

文章目录 rust处理全局变量的策略方法1&#xff1a;在main中自动Drop全局变量 参考 rust处理全局变量的策略 Rust 的静态变量不会在程序退出时自动调用 Drop&#xff0c;因为它们的生命周期与进程绑定。 use std::sync::OnceLock;struct GlobalData {content: String, }impl …...

Node.js教程入门第一课:环境安装

对于一个程序员来说&#xff0c;每学习一个新东西的时候&#xff0c;第一步基本上都是先进行环境的搭建&#xff01; 从本章节开始让我们开始探索Node.js的世界吧! 什么是Node.js? 那么什么是Node.js呢&#xff1f;简单的说Node.js 就是运行在服务端的 JavaScript JavaScript…...

Visual Studio 使用 GitHub Copilot 扩展

&#x1f380;&#x1f380;&#x1f380;【AI辅助编程系列】&#x1f380;&#x1f380;&#x1f380; Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…...

【Qualcomm】IPQ5018获取TR069 WiFi 接口Stats状态方法

IPQ5018 简介 IPQ5018 是高通(Qualcomm)公司推出的一款面向网络设备的系统级芯片(SoC)。它通常用于路由器、接入点和其他网络设备中,提供高性能的无线网络连接。以下是关于 IPQ5018 的一些关键特性和功能: 关键特性 高性能处理器 IPQ5018 集成了多核 CPU,通常是 ARM …...

数字营销咨询,照亮企业营销数字化每一步

在快消品领域&#xff0c;面对市场竞争日益激烈的现状&#xff0c;营销端的数字化升级已经成为企业生意增长的重要驱动力。 然而&#xff0c;鉴于营销端数字化建设的高昂成本及其广泛覆盖的业务范畴&#xff0c;企业在启动此类项目之前&#xff0c;通常会遭遇一系列挑战与顾虑&…...

修改vscode中emmet中jsx和tsx语法中className的扩展符号从单引号到双引号 - HTML代码补全 - 单引号双引号

效果图 实现步骤 文件 > 首选项 > 设置搜索“”在settings.json中修改&#xff0c;增加 "emmet.syntaxProfiles": {"html": {"attr_quotes": "single"},"jsx": {"attr_quotes": "double","…...

【Cmake】

1 设置安装路径 -DCMAKE_INSTALL_PREFIX"安装路径"2 使用交叉编译 -DCMAKE_C_COMPILE"交叉编译器绝对路径"3 编译静态库 -DPAHO_BUILD_STARTTRUE...

Flutter 内嵌 unity3d for android

前言&#xff1a; 最近刚整完 unity3d hybridCLR 更新代码和资源&#xff0c;我们 趁热打铁 将 Unity3D 嵌入 Flutter 应用中。实现在 Flutter 使用 Unity3D, 可以做 小游戏 大游戏&#xff1b; 之前都是 内嵌 Webview 来实现的。虽然 CocosCreator 做出来的效果也不错&#xf…...

sqlite加密-QtCipherSqlitePlugin 上

1、下载并解压软件 https://download.csdn.net/download/notfindjob/90140129 2、编译&#xff08;可支持Qt5.12编译&#xff09; 3、安装插件...

正交投影 (Orthographic Projection) 详解

正交投影 (Orthographic Projection) 详解 正交投影是一种将三维空间中的物体投影到二维平面上的方法&#xff0c;它在计算机图形学、建筑设计、工程绘图等领域中广泛应用。与透视投影不同&#xff0c;正交投影不会随着距离的变化而改变物体的大小&#xff0c;因此所有平行线在…...

盛元广通畜牧与水产品检验技术研究所LIMS系统

一、系统概述 盛元广通畜牧与水产品检验技术研究所LIMS系统集成了检测流程管理、样品管理、仪器设备管理、质量控制、数据记录与分析、合规性管理等功能于一体&#xff0c;能够帮助实验室实现全流程的数字化管理。在水产、畜牧产品的质检实验室中&#xff0c;LIMS系统通过引入…...

三维空间刚体运动4-1:四元数表示变换(各形式相互转换加代码——下篇)

三维空间刚体运动4-1&#xff1a;四元数表示变换&#xff08;各形式相互转换加代码——下篇&#xff09; 4. 四元数到其它旋转表示的相互转换4.1 旋转向量4.2 旋转矩阵4.3 欧拉角4.3.1 转换关系4.3.2 转换中的万象锁问题 5. 四元数的其他性质5.1 旋转的复合5.2 双倍覆盖5.3 指数…...

PyTorch如何通过 torch.unbind 和torch.stack动态调整张量的维度顺序

笔者一篇博客PyTorch 的 torch.unbind 函数详解与进阶应用&#xff1a;中英双语中有一个例子如下&#xff1a; # 创建一个 3x2x2 的三维张量 x torch.tensor([[[1, 2], [3, 4]],[[5, 6], [7, 8]],[[9, 10], [11, 12]]])# 第一步&#xff1a;沿第 0 维分解为 3 个 2x2 张量 un…...

【Unity3D】报错libil2cpp.so找不到问题

mainTemplate.gradle文件末尾添加&#xff1a; **IL_CPP_BUILD_SETUP** 此报错发生在低版本的Unity升级到高版本后&#xff0c;例如Unity2019升级到Unity2021&#xff0c;而Unity2019默认创建的mainTemplate.gradle文件是不包含**IL_CPP_BUILD_SETUP** 因此会导致libil2cpp.so…...

事件冒泡机制详解

一、事件传播的三个阶段 1. 捕获阶段 事件从最外层元素&#xff08;如document&#xff09;开始&#xff0c;沿着 DOM 树向目标元素传播。这个阶段就像是事件的“下行通道”&#xff0c;在这个过程中&#xff0c;事件会经过目标元素的祖先元素。不过&#xff0c;在捕获阶段&a…...

红米Note 9 Pro5G刷LineageOS

LineageOS介绍 LineageOS 是一个基于 Android 的开源操作系统&#xff0c;是面向智能手机和平板电脑等设备的替代性操作系统。它是 CyanogenMod 的继承者&#xff0c;而 CyanogenMod 是曾经非常受欢迎的一个第三方 Android 定制 ROM。 在 2016 年&#xff0c;CyanogenMod 项目因…...

6.3.1 MR实战:计算总分与平均分

在本次实战中&#xff0c;我们的目标是利用Apache Hadoop的MapReduce框架来处理和分析学生成绩数据。具体来说&#xff0c;我们将计算一个包含五名学生五门科目成绩的数据集的总分和平均分。这个过程包括在云主机上准备数据&#xff0c;将成绩数据存储为文本文件&#xff0c;并…...

ARM循环程序和子程序设计

1、计算下列两组数据的累加和并存入到sum1和 sum2 单元中。datal:0x12,0x935,0x17,0x100,0x95,0x345。 data2:0x357,0x778,0x129,0x188,0x190,0x155,0x167。 1.定义数据段 ;定义数据段&#xff0c;类型为data(表示为数据段)&#xff0c;权限为可读可写(程序可以读取和修改这…...

静态路由、RIP、OSPF、BGP的区别

静态路由&#xff1a;是管理员手动将路由写入到路由器中&#xff0c;配置简单开销小&#xff0c;但不能适应网络变化&#xff0c;只用于小型的网络 RIP&#xff0c;路由信息协议&#xff0c;属于距离矢量路由协议的一种&#xff0c;根据跳数来判断最优路由&#xff0c;如果跳数…...

知识分享第二十八天-数学篇一

组合.二项式定理.常见导数 组合 让我们通过一个具体的例子来理解组合&#xff08;Combinations&#xff09;的概念 假设你有一个装有5个不同颜色球的袋子&#xff1a;红、蓝、绿、黄和紫。你想从中随机抽取3个球&#xff0c; 不考虑顺序&#xff0c;那么你可以有多少种不同的…...

安全测试入门:开发与测试都需要知道的OWASP TOP 10

为何OWASP TOP 10是测试人员的必修课&#xff1f;在数字化浪潮席卷全球的今天&#xff0c;软件已深度融入商业运营与社会生活。每一次点击、每一次数据交换的背后&#xff0c;都潜藏着安全风险。对于软件测试从业者而言&#xff0c;功能与性能测试仅是基础&#xff0c;安全测试…...

Pixel Couplet Gen入门指南:8-bit UI无障碍访问(色盲模式支持)

Pixel Couplet Gen入门指南&#xff1a;8-bit UI无障碍访问&#xff08;色盲模式支持&#xff09; 1. 项目介绍 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的AI春联生成器。通过ModelScope大模型驱动&#xff0c;它将中国传统的春联创作转化为充满怀旧游戏美…...

3个极简功能让时间管理者实现高效时间规划:Catime计时器全场景应用指南

3个极简功能让时间管理者实现高效时间规划&#xff1a;Catime计时器全场景应用指南 【免费下载链接】Catime A tiny (995KB) but mighty timer in pure C. Supports clock, countdown, stopwatch, Pomodoro, and fully customizable tray animations (GIFs, CPU/Mem%)&#x1f…...

像素剧本圣殿详细步骤:Qwen2.5-14B-Instruct模型服务健康检查与自动扩缩容配置

像素剧本圣殿详细步骤&#xff1a;Qwen2.5-14B-Instruct模型服务健康检查与自动扩缩容配置 1. 项目概述 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。该系统采用复古未来像素风格UI设计&#xff0…...

MarkEdit 文本编码处理技术深度解析

MarkEdit 文本编码处理技术深度解析 【免费下载链接】MarkEdit Just like TextEdit on Mac but dedicated to Markdown. 项目地址: https://gitcode.com/gh_mirrors/ma/MarkEdit MarkEdit 是一款专为 Markdown 设计的文本编辑器&#xff0c;如同 Mac 上的 TextEdit 但专…...

Escornabot-lib:面向教育机器人的Arduino语义化控制库

1. Escornabot-lib 库概述Escornabot-lib 是一个专为 Escornabot 教育机器人设计的 Arduino C 类库&#xff0c;由 ROBOteach 团队维护&#xff0c;采用 GNU GPL v3.0 开源协议。该库并非仅提供抽象接口&#xff0c;而是完整封装了 Escornabot 硬件平台的全部底层驱动、状态管理…...

【网络层-IP数据报】

网络层-IP数据报一、概念二、内容三、分片一、概念 1.IP 属于网络层协议&#xff0c;提供不可靠、无连接的数据包交付服务&#xff0c;核心单元就是 IP 数据报。 2.无连接&#xff1a;每个数据报独立路由&#xff0c;走不同路径也可以。 3.不可靠&#xff1a;不保证一定送达、…...

告别传统方法:LogAnomaly如何用NLP技术提升日志异常检测准确率?

告别传统方法&#xff1a;LogAnomaly如何用NLP技术重构日志异常检测范式&#xff1f; 日志数据如同数字世界的神经系统&#xff0c;记录着系统运行的每一次"心跳"与"呼吸"。传统检测方法就像拿着放大镜寻找心电图异常&#xff0c;而LogAnomaly则带来了全新…...

雷小兔:让学术论文排版变得简单高效

产品概述 雷小兔是一款专门为学生和研究人员设计的学术论文辅助工具。无论你是在准备毕业论文、学位论文还是学术发表&#xff0c;雷小兔都能为你提供全面的支持和帮助。 论文排版方面的核心优势 1. 模板齐全&#xff0c;开箱即用 雷小兔内置了数十种符合国内外高校标准的论…...

【应答器】基于matlab应答器特殊区段信息包报文编码仿真【含Matlab源码 15258期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...