您当前的位置: 首页 >  c++

令狐掌门

暂无认证

  • 2浏览

    0关注

    513博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ 单例模式

令狐掌门 发布时间:2020-04-12 14:38:18 ,浏览量:2

一 、单例模式

      单例可能是最常用的简单的一种设计模式,实现方法多样,根据不同的需求有不同的写法; 同时单例也有其局限性,因此有很多人是反对使用单例的。本文对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             
关注
打赏
1652240117
查看更多评论
0.0747s