c++设计模式之单例模式
1. 单例模式简介
在一个进程中,一个类仅创建一个唯一的实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
主要应用场景有:日志记录,配置管理,线程池,连接池,内存池等。
2. 如何定义一个单例
1. 构造函数私有化
包括普通构造函数,拷贝构造函数,赋值操作符重载函数,防止出现一个以上的实例。
2. 使用类的私有静态指针变量指向类的唯一实例
3. 使用一个公有的静态方法获取该实例
3. 代码实现
class Singleton
{
private:static Singleton* instance;
private:Singleton() {};~Singleton() {};Singleton(const Singleton&);Singleton& operator=(const Singleton&);
public:static Singleton* getInstance() {if(instance == NULL)instance = new Singleton();return instance;}
};// init static member
Singleton* Singleton::instance = NULL;
4. 线程安全
线程安全问题根本原因:两个线程同时调用getInstance(),可能产生两个实例。
一般考虑加锁的方式避免线程安全问题,但加锁比较繁琐,并且稍有不慎仍然可能出问题。
本文从用法上来避免线程安全问题,此方法简单明了,不会出错,适合大部分场景。
本文的用法如下:
在主线程中事先创建好实列,以后在其他线程中仅仅获取该实例指针进行使用。
c++设计模式之单例模式相关推荐
- socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- C#设计模式(1)——单例模式
原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设 ...
- java设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
- java单例模式的七种写法_Java设计模式之单例模式的七种写法
什么是单例模式? 单例模式是一种常见的设计模式,单例模式的写法有很多种,这里主要介绍三种: 懒汉式单例模式.饿汉式单例模式.登记式单例 . 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类 ...
- go设计模式之单例模式
在这里插入图片描述# go设计模式之单例模式 在软件开发时,经常会遇到有些对象需要保证只有一个实例的,那么这种设计模式就应用而生. 定义 单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模 ...
- 一篇博客读懂设计模式之---单例模式
一篇博客读懂设计模式之---单例模式 一. 单例模式 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处 ...
- Java 设计模式(3)单例模式
前言 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自 ...
- socket可以写成单例嘛_精读设计模式 Singleton 单例模式
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- 设计模式之单例模式——Singleton
设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...
- 实践GoF的设计模式:单例模式
本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:单例模式>,作者: 元闰子. 简述 GoF 对单例模式(Singleton)的定义如下: Ensure a class onl ...
最新文章
- php7简短而安全的数组遍历方法
- 汇编: 描述内存长度
- Java 11都有哪些新特性?
- vba 字典_VBA中字典的基础概念及调用方法
- access实例_西门子PLC1200组态王跟Access数据库-⑥组态王变量
- 用python写网络爬虫 -从零开始 4 用正则表达式 编写链接爬虫
- 父元素浮动子元素会浮动吗_为什么quot;overflow:hiddenquot;能清除浮动的影响
- css中利用margin来隐藏元素
- C++ std::lock_guard 自动加锁、释放锁 原理
- 2020年最新人事管理软件排名(建议收藏)!
- 计算机网络自顶向下第六章,计算机网络 自顶向下方法 第六章(英文版).ppt
- ap6212中串口蓝牙在linux下的使用记录
- 利用matlab来求极限
- OpenG: 单模型旋转
- 勒让德多项式的正交性和归一化
- 使用python依次比较两个pcap文件中的每个报文
- java心电图_使用原生js+canvas实现模拟心电图
- JTAG (三) jtag实例 riscv
- 微信小程序转二维码方法分享
- 电脑裸妆linux,美妆相机pc版 版本 V5.0.0