关于动态单例设计模式或动态单件设计模式—Singleton

文章:http://www.lilu.name/Html/diannaojishu/2010-09/003468.html 中介绍了三种单例设计模式:动态、静态和可配置。然而这三种模式有一个共同的特点就是都使用了常驻内存的静态变量:静态成员变量或静态局部变量。当单例占用了大量内存且不经常使用时,以上三种模式都不适用;反之,如果单例占用内存较小或经常使用,则可以采用上述模式。针对第一种情况,本文给出了如下动态单例设计模式。

基本思路:使用引用计数(参考c++沉思录中的句柄类)+save/load/clear实现。

适用情况:单例占用了大量内存且不经常使用时

优 点:1、单例特性;2、代理内存管理,用户无需考虑内存管理问题;

缺 点:1、需要额外空间用于保存引用计数;2、需要外存保存单例对象,因此需要占用一部分外存空间。

具体实现:

说明:关于上述代码的改进

1.《Effective C++》中的条款4中提到一个“跨编译单元之初始化次序”问题,并给出了解决办法“以local static对象替换 non-local static ",本文开始连接的文章中的动态单例设计模式考虑到了这一点。注:虽然本例中使用的是私有静态成员变量,但是仍然不能排除跨编译单元的引用,因为“member函数和friend函数还是可以调用你的private变量”。

2.线程安全问题。《Effective C++》也有改进方案,待完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值