第一篇:单例模式

单例模式即一个类只拥有一个实例。

单例模式一

class MyClass{ private: MyClass(){} //构造函数是私有的 MyClass(const MyClass &); //拷贝和复制都是私有的 MyClass& operator=(const MyClass &); public: ~MyClass(); static MyClass* Instance(); //无关的其他成员函数和变量 private: int m_iNum; public: int GetVal()const{return m_iNum;} };
//其中Instance()函数实现 MyClass* MyClass::Instance(){ static MyClass instance; return &instance; }
因为构造函数是私有的,所以不能通过new来生成一个新的对象,也不能够声明一个对象。但是可以用静态方法static MyClass* Instance(){static MyClass instance; return &instance;},这个方法声明(在类的内部,外部不能声明)了一个静态的MyClass对象,所有的对象共享一份。所以只会有一个MyClass对象。实现了单例模式。

单例模式二

通过判断进行单例模式
class MyClass{ private: MyClass(); ~MyClass(){} static int m_nHandleCount; //该单例对象引用次数 static MyClass *m_pHandle; public: static MyClass* GetHandle(); void releaseHandle(); } //函数实现 MyClass* MyClass::GetHandle(){ if(m_pHandle == NULL){ m_pHandle = new MyClass; if(m_pHandle != NULL){ m_nHandleCount++; return m_pHandle; } return NULL; //说明在new的时候出错 }else{ m_nHandleCount++; return m_pHandle; } } //释放 void MyClass::releaseHandle(){ if(m_nHandleCount > 0){ m_nHandleCount--; } if(m_nHandleCount == 0){ if(m_pHandle != NULL){ delete m_pHandle; m_pHandle = NULL; } } }

关键

这两种方法实际上都是差不多

  • 构造函数要是私有的(包括复制构造函数,和=重载)
  • static的使用(第一种方法静态对象,第二种静态指针)事实上是差不多的
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,845评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,531评论 1 8
  • ## 可重入函数 ### 可重入性的理解 若一个程序或子程序可以安全的被并行执行,则称其为可重入的;即当该子程序正...
    夏至亦韵阅读 725评论 0 0
  • 一. Java基础部分.................................................
    wy_sure阅读 3,832评论 0 11