首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
C++静态变量依赖关系
📅 2026/11/2 15:02:44
✍️ 爱科研究院
👁 阅读 3,247
背景常用单例之间操作相互依赖或者对同一份资源进行操作。进行对象或资源释放时候很容易重复导致程序异常。依赖顺序// a.cppstatic A a; // 第1个构造 → 最后释放static LateDestructor late; // 依赖a会后析构// b.cppstatic B b; // 构造顺序依赖链接顺序 → 释放顺序不确定// main.cppvoid foo() {static C c; // 在foo()首次调用时构造 → 在main.cpp其他静态变量之后释放}int main() {foo();static D d; // 构造顺序较晚 → 释放顺序较早return 0;}释放顺序d → c → a → bb的顺序不确定aexit#include cstdlib #include iostream void func1() { std::cout First\n; } void func2() { std::cout Second\n; } void func3() { std::cout Third\n; } int main() { atexit(func1); // 第一个注册 atexit(func2); // 第二个注册 atexit(func3); // 第三个注册 return 0; // 执行顺序: func3 → func2 → func1 }晚释放单例类//C单例延后释放类 解决单例相互依赖问题将当前单例留到最后释放。 class FTLibraryInstance { public: static std::string getVersion(); static FT_Library library(); static void release(); }; // 自定义删除器 struct FTLibraryDeleter { void operator()(FT_Library *lib) { if (lib) FT_Done_FreeType(*lib); } }; static std::unique_ptrFT_Library, FTLibraryDeleter kFTLibrary; FT_Library FTLibraryInstance::library() { if (!kFTLibrary) { auto lib new FT_Library; kFTLibrary.reset(lib); FT_New_Library(gFTMemory, lib); FT_Add_Default_Modules(*lib); FT_Set_Default_Properties(*lib); } return *kFTLibrary; } std::string FTLibraryInstance::getVersion() { auto lib library(); if (!lib) return ; FT_Int major, minor, patch; FT_Library_Version(lib, major, minor, patch); std::string freetypeVersion std::to_string(major) . std::to_string(minor) . std::to_string(patch); return freetypeVersion; } void FTLibraryInstance::release() { kFTLibrary.reset(); }创作不易小小的支持一下吧
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/11/2 15:02:44
wkhtmltopdf HTML转PDF 实战指南:从 HTML 文件到成品 PDF
2026/11/2 15:02:44
Harmony OS C++实战
2026/11/2 14:57:43
QT + WebAssembly + Vue环境搭建
2026/11/2 18:14:07
ETTask异步机制深度解析
2026/11/2 18:14:07
Rails附件处理实战:Paperclip原理、配置与生产环境排障
2026/11/2 18:14:07
城市基础设施背后的智能技术解析
2026/11/2 18:14:07
电力系统网络重构:凸优化技术解析与应用实践
2026/11/2 18:14:07
OpenViking:智能体记忆管理的文件系统范式革命
2026/11/2 18:09:05
单文件HTML贪吃蛇:Canvas游戏循环与碰撞判定实战
2026/11/2 1:03:35
工业SPI隔离方案:K64主控+MAX14431从设计到排查
2026/11/2 1:03:35
SPI隔离器MAX14431与PIC18F8722实现工业级稳定通信的实战指南
2026/11/2 1:03:35
雷达信号调制技术解析:从LFM到相位连续调频波形设计
2026/11/2 2:42:45
面向复杂光照与角度的宠物面部识别鲁棒性增强策略
2026/11/2 2:42:47
DRV8818PWPR与R7FA8M1AHECBD工业步进驱动实战指南
2026/11/2 2:42:50
STM32与DRV8818双极步进电机驱动方案:从选型到调试全流程解析
2026/11/2 2:42:45
面向复杂光照与角度的宠物面部识别鲁棒性增强策略
2026/11/2 2:42:47
DRV8818PWPR与R7FA8M1AHECBD工业步进驱动实战指南
2026/11/2 2:42:50
STM32与DRV8818双极步进电机驱动方案:从选型到调试全流程解析