当前位置: 首页 > 游戏攻略 > 深入理解C++中的单例模式写法

深入理解C++中的单例模式写法

来源:网络 作者:趣玩小编 发布时间:2024-04-19 18:59:42

单例模式的写法可以分为饿汉式和饱汉式,它们都依赖C++的一个重要知识点:static的使用。

具体的写法有多种,其中最推荐的是饱汉式(延时初始化,在需要时才去初始化)。

有人可能会采用其他写法,但在我看来这样做并不必要。

其他的写法包括:

写法一:静态成员饿汉式

存在的问题:函数外的static变量在不同的编译单元中的初始化顺序未定义,即static Singleton& getInstance()和static Singleton _instance的顺序未知。

写法二:指针饱汉式

存在的问题:1. 不是线程安全(可改进:加锁);2. 内存泄漏(可改进:使用智能指针或依赖静态的嵌套类的析构函数)。

题外话:

写法二中的指针是否需要释放?

如果对象没有被释放,在程序运行期间可能会存在内存泄露问题。

有人可能会说,在程序结束时,操作系统会进行必要的清理工作,包括释放进程的所有堆栈等信息,即使存在内存泄露,操作系统也会收回;而且对于单例来讲,进程运行期间仅有一个,对于现代计算机而言,占用的内存似乎也不会太大。此外,该实例有可能根本就没有进行内存的申请操作,这种情况下不释放实例所占内存,对进程的运行也不会造成影响。

但我认为还是应该在合适的地方进行释放(在程序关闭前?),养成良好的习惯。对于大型项目来说,会有内存检测工具,避免报内存泄露,增加检查成本。

当然,如果采用最佳模式,就无需考虑这个问题了,只需要写好这个类的析构函数就可以了。

相关攻略
热门推荐 更多 +
休闲益智 | 945.71MB
我的世界是一款风靡全球的3D第一人称沙盒...
9.6
角色扮演 | 878.96MB
最新版《汉家江湖》是一款以武侠为题材、以...
9.5
飞行射击 | 262.79MB
《荒野乱斗》是快节奏射击类多人对战游戏。...
9.5
飞行射击 | 102.9M
掌上飞车手游app是由腾讯特别为QQ飞车...
9.2
休闲益智 | 263.56MB
开心消消乐是一款轻松休闲的手游,也是一款...
9.6