一 、单例模式
单例可能是最常用的简单的一种设计模式,实现方法多样,根据不同的需求有不同的写法; 同时单例也有其局限性,因此有很多人是反对使用单例的。本文对C++ 单例的常见写法进行了一个总结, 包括懒汉式、线程安全、单例模板等; 按照从简单到复杂,最终回归简单的的方式循序渐进地介绍,并且对各种实现方法的局限进行了简单的阐述,大量用到了C++ 11的特性如智能指针, magic static,线程锁; 从头到尾理解下来,对于学习和巩固C++语言特性还是很有帮助的。
1、什么是单例
单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例; 具体运用场景如:
-
设备管理器,系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动;
-
数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取;
2、 什么时候使用单例模式
你需要系统中只有唯一一个实例存在的类的全局变量的时候才使用单例。
3、C++单例模式的实现 基础要点
-
全局只有一个实例:static 特性,同时禁止用户自己声明并定义实例(把构造函数设为 private)
-
线程安全
-
禁止赋值和拷贝
-
用户通过接口获取实例:使用 static 类成员函数
五种实现方式
(1)有缺陷的懒汉式
懒汉式(Lazy-Initialization)的方法是直到使用时才实例化对象,也就说直到调用geInstance() 方法的时候才 new 一个单例的对象。好处是如果被调用就不会占用内存。
/*
* C++设计模式之单例模式
*
* version1:
* with problems below:
* 1. thread is not safe
* 2. memory leak
* */
#include
using namespace std;
class Singleton{
private:
static Singleton* m_pInstance;
private:
Singleton(){
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?