在之前的博文C++57个入门知识点_44:单例的实现与理解中,已经详细介绍了单例模式,并且根据其中内容,单例模式已经可以在日常编码中被使用,本文将会再做梳理。
Singleton 单件模式可以说是最简单的设计模式,但由于多线程环境的双检查锁里的内存reorder的问题,实现时的细节并不简单,大家需要注意多线程环境下的安全做法。为了整体的一致性,本篇都称之为单件模式。
文章目录
单件模式属于一个新的类别,将其归结到“对象性能”模式,该模式的简介如下:
1. “对象性能”模式
面向对象很好地解决了“抽象”的问题,但是不可避免地要付出一定的代价(虚函数(内存等代价哒)、继承)。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况(倍乘效应等),面向对象所带来的成本必须谨慎处理。
1.1 典型模式
- Singleton
- Flyweight
2. 动机(Motivation)
- 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率
- 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?
- 这应该是类设计者的责任,而不是使用者的责任
3. Singleton 单件模式的实现版本
首先将构造函数和拷贝构造函数设置为私有,如果不写的话,编译器会默认生成两个公有的,让外界不能使用它们,唯一的做法就是将其设置为私有的。然后再设置静态变量,并进行静态变量的初始化。代码如下
class
本文深入探讨了C++中的Singleton设计模式,分析了不同线程安全版本的实现,包括线程非安全版本、加锁版本、双检查锁版本以及C++11后的跨平台实现。文章强调了在多线程环境下实现Singleton模式的注意事项,指出在正确实现双检查锁的重要性。
订阅专栏 解锁全文
1090

被折叠的 条评论
为什么被折叠?



