登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
3
/ 3 页
下一页
返回列表
首页
›
业界区
›
业界
›
设计模式学习(一)单例模式补充——单例模式析构 ...
设计模式学习(一)单例模式补充——单例模式析构
[ 复制链接 ]
秦晓曼
2025-6-9 08:58:57
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
目录
前言
无法调用析构函数的原因
改进方法
内嵌回收类
智能指针
局部静态变量
参考文章
前言
在《单例模式学习》中提到了,在单例对象是通过new关键字动态分配在堆上的情况下,当程序退出时,不会通过C++的RAII机制自动调用其析构函数。本文讨论一下这种现象的原因以及解决方法。
无法调用析构函数的原因
在DCLP(双检查锁模式)中,CSingleton中的instance是一个静态指针变量,被分配在全局/静态存储区。而instance所指向的CSingleton实例是通过new创建在堆上的,只能手动调用delete来释放相关资源(对于单例模式这是无法实现的,因为析构函数私有),无法通过RAII释放相关资源。
在程序结束时,instance这个指针变量被销毁了,但它所指向的内存空间中的CSingleton对象并没有被显式销毁,而是由操作系统去回收这一块内存(不会调用其析构函数)。然而依赖操作系统来清理资源并不是一个优雅的结束方式,可能会造成文件句柄未关闭、网络连接未断开等资源泄漏。
class CSingleton
{
public:
static CSingleton* getInstance();
static std::mutex mtx;
private:
CSingleton(){}
~CSingleton(){}
CSingleton(const CSingleton&) = delete;
CSingleton& operator=(const CSingleton&) = delete;
static CSingleton* instance;
};
CSingleton* CSingleton::instance;
CSingleton* CSingleton::getInstance()
{
if(nullptr == instance)
{
mtx.lock();
if(nullptr == instance)
{
instance = new CSingleton();
}
mtx.unlock();
}
return instance;
}
复制代码
改进方法
在讨论改进方法时,我们还是倾向于利用C++的RAII机制,而不是手动去控制释放的时机。
内嵌回收类
我们的单例类对象生命周期的开始是在第一次调用时,结束是在程序结束时。
而且我们知道①静态成员变量的生命周期是从程序启动到结束②在静态成员变量被销毁时会调用其析构函数
因此我们可以在单例类中定义一个用于释放单例类资源的内嵌类,将其析构函数定义为显式删除单例对象的操作,然后在单例类中添加一个内嵌类类型的静态成员变量garbo。
这样的话,在程序结束时garbo就会被销毁,而RAII机制确保了在销毁时会调用内嵌类CGarbo的析构函数。
因为在~CGarbo()中delete了CSingleton::instance,所以~CSingleton()就会被调用,相关资源得以释放。
[code]class CSingleton{public: static CSingleton* getInstance();private: CSingleton(){std::cout
单例
模式
设计模式
学习
补充
相关帖子
3分钟搞懂深度学习AI:实操篇:LSTM/GRU
2.Langchain 1.2.0 学习 --- Models
基于深度学习的大棚黄瓜检测系统演示与介绍
Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)
学习AI 编程工具
Spring IOC 源码学习 事务增强相关的对象创建
一文学习 Spring 声明式事务源码全流程总结
一文学习 工作流开发 BPMN、 Flowable
3.Langchain 1.2.0 学习 --- LCEL和Runnable
Jenkins 学习总结
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
3分钟搞懂深度学习AI:实操篇:LSTM/GRU
0
763
庞环
2026-03-17
科技
2.Langchain 1.2.0 学习 --- Models
0
356
哎禹供
2026-03-18
安全
基于深度学习的大棚黄瓜检测系统演示与介绍
0
805
府扔影
2026-03-19
业界
Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)
0
520
东门芳洲
2026-03-21
科技
学习AI 编程工具
0
782
拼匍弦
2026-03-22
安全
Spring IOC 源码学习 事务增强相关的对象创建
0
802
辈霖利
2026-03-23
业界
一文学习 Spring 声明式事务源码全流程总结
0
103
米嘉怡
2026-03-23
业界
一文学习 工作流开发 BPMN、 Flowable
0
386
凌彦慧
2026-03-25
业界
3.Langchain 1.2.0 学习 --- LCEL和Runnable
0
526
杓疠?
2026-03-25
业界
Jenkins 学习总结
0
202
愤血冒
2026-03-26
回复
(41)
邹语彤
2025-12-4 16:28:40
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
伯绮梦
2025-12-5 17:20:01
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
呵桢
2025-12-8 05:23:50
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
荪俗
2025-12-10 04:24:21
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
宿遘稠
2025-12-22 21:39:23
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
梅克
2025-12-23 23:49:20
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
倘伟
2025-12-25 08:14:42
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
能氐吨
2025-12-26 18:12:32
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
遑盲
2026-1-11 02:43:16
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
缍米
2026-1-11 12:38:07
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
娄静曼
2026-1-16 06:08:09
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
诘琅
2026-1-18 09:31:36
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个有用。
缑娅瑛
2026-1-21 15:56:48
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
臧莞然
2026-1-21 18:01:27
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
恃液
2026-1-22 20:41:59
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
频鹏凶
2026-1-24 09:13:09
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
第璋胁
2026-1-25 16:17:33
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
凳舒
2026-1-27 02:43:35
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
国语诗
2026-1-28 04:37:37
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
下一页 »
1
2
3
/ 3 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
秦晓曼
2026-1-28 04:37:37
关注
0
粉丝关注
23
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9916
7
宋子
9878
8
荪俗
9018
9
闰咄阅
9995
10
刎唇
9997
查看更多
今日好文热榜
804
Openclaw接入微信(亲测有效)
26
HagiCode Desktop 混合分发架构解析:如何
246
民间盲派秘传:十二时辰初中末出生吉凶(中
270
是谁 2026 年还在用 Sublime Text 写代码?
220
HagiCode Desktop 混合分发架构解析:如何
790
HagiCode Desktop 混合分发架构解析:如何
998
分布式自动化测试的大规模落地方案-宏控天
680
民间盲派秘传:十二时辰初中末出生吉凶(中
424
民间盲派秘传:十二时辰初中末出生吉凶(中
5
民间盲派秘传:十二时辰初中末出生吉凶(中
497
HagiCode Desktop 混合分发架构解析:如何
443
信息系统项目管理师 2025年上半年(第2批)
675
民间盲派秘传:十二时辰初中末出生吉凶(中
641
民间盲派秘传:十二时辰初中末出生吉凶(中
68
民间盲派秘传:十二时辰初中末出生吉凶(中
728
民间盲派秘传:十二时辰初中末出生吉凶(中
418
记一次综合型流量分析 | 添柴不加火
388
AI开发-python-langchain框架(3-14-并行流
862
WPF新手村教程(七)—— 终章(MVVM架构
296
38岁程序员的接单平台踩坑史:从被骗到月入