C++实现设计模式之 —— 单例模式 Singleton

原创 2015年07月07日 20:40:48

  单例模式是最简单的创建型模式,当某个类只需要唯一的一份实例时,使用单例模式可以确保不会创建多余的实例。在C++ 中,单例模式可以避免全局变量的使用。下面是一个典型的线程安全的单例模式

#ifndef Singleton_h__
#define Singleton_h__

#include <mutex> //C++11

class CSingleton
{
public:
	static CSingleton* GetInstance()
	{
		if (m_pInstance == NULL)
		{
			m_lock.lock();
			//double check for better performance
			if (m_pInstance == NULL)
			{
				m_pInstance = new CSingleton();
			}
			m_lock.unlock();
		}
		return m_pInstance;
	}

	static void Destroy()
	{
		m_lock.lock();
		delete m_pInstance;
		m_pInstance = NULL;
		m_lock.unlock();
	}

	void Method()
	{
		//
	}
private:
	CSingleton(){}
	~CSingleton()
	{
		delete m_pInstance;
		m_pInstance = NULL;
	}

	//Disable copy and assign
	CSingleton(const CSingleton& rhs);
	CSingleton& operator = (const CSingleton& rhs);

private:
	static CSingleton*	m_pInstance;
	static std::mutex	m_lock;
};


CSingleton* CSingleton::m_pInstance = NULL;

std::mutex CSingleton::m_lock;

#endif // Singleton_h__


  为了确保线程安全,我们需要对创建实例部分进行线程加锁,上述示例代码使用了双重检查的方式,既能够确保线程安全,也避免了由于每次加锁导致的性能消耗。如果使用下面的实现方式:

static CSingleton* GetInstance()
{
	m_lock.lock();
	if (m_pInstance == NULL)
	{
		m_pInstance = new CSingleton();
	}
	m_lock.unlock();
	return m_pInstance;
}

则每次调用GetInstance() 都需要加锁。




【Singleton】单例模式及常见的6种写法—宁可饥饿也不偷懒

单例模式大家并不陌生,分为懒汉式、饿汉式之类的。它们是有些细微的不同,下面就一点一点告诉你们这俩汉子有嘛不同   下面是一个简单的小实例: //简单懒汉式 public class Singleton...
  • knockheart
  • knockheart
  • 2013年06月19日 11:46
  • 2706

C++设计模式5--单例模式Singleton--当前对象只有一个实例

很多情况下,我们在开发项目的过程中,都希望自己运行的某个部件只有一个实例, 比如我们天天用QT开发界面,QTCreate里帮助菜单下的关于Qt Create菜单,弹出来的关于对话框,在QTCreate...
  • gatieme
  • gatieme
  • 2014年01月08日 13:25
  • 21424

设计模式之——单例模式(Singleton)的实现、优缺点和常见应用场景

一.单例模式的三种实现 以及各自的优缺点 转载自http://my.oschina.net/suyewanwan/blog/102525 单例模式:单例模式的意思就是只有一个实例。单例模式确保某...
  • qq_30465427
  • qq_30465427
  • 2015年08月09日 15:36
  • 1094

设计模式 - 单例模式(Singleton) C++实现

创建型模式 单例模式(Singleton) 意图 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 原型模式(Prototype) 生成器模式(Build...
  • zhaosdfa
  • zhaosdfa
  • 2015年04月20日 23:41
  • 314

C++设计模式之三--Singleton单例模式

转自:http://www.cnblogs.com/wanggary/archive/2011/04/09/2010876.html   单例模式看起来也蛮简单的,就是在系统中只允许产生这个类的一...
  • life_liver
  • life_liver
  • 2013年11月05日 20:07
  • 513

C++设计模式之Singleton pattern(单例模式)

Singleton Pattern (单例模式) ---选自百度百科 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例...
  • wbq2018
  • wbq2018
  • 2013年03月30日 12:26
  • 463

c++ 设计模式(三)singleton 单例模式

单例模式的意图:保证一个类只有一个实例,并提供一个访问它的全局节点 使用性:             当类只能一个实例而且客户可以从从一个周所周知的访问点访问它             当这个唯一的实...
  • chenxun2009
  • chenxun2009
  • 2015年09月07日 22:41
  • 509

C++设计模式之单例模式(Singleton)

#include using namespace std; //程序在结束的时候,系统会自动析构所有的全局变量。 //事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样 c...
  • hahaha777527
  • hahaha777527
  • 2016年03月24日 12:17
  • 176

设计模式C++之三(Singleton单例模式)

单例模式看起来也蛮简单的,就是在系统中只允许产生这个类的一个实例,既然这么简单,就直接贴代码了。更详细的内容及说明可以参考原作者博客:cbf4life.cnblogs.com。 3.1.解释 ma...
  • jeje1115
  • jeje1115
  • 2011年12月14日 12:33
  • 366

C++设计模式5--单例模式Singleton--当前对象只有一个实例 .

很多情况下,我们在开发项目的过程中,都希望自己运行的某个部件只有一个实例, 比如我们天天用QT开发界面,QTCreate里帮助菜单下的关于Qt Create菜单,弹出来的关于对话框,在QTCreat...
  • zhs362625119
  • zhs362625119
  • 2014年06月06日 00:04
  • 346
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++实现设计模式之 —— 单例模式 Singleton
举报原因:
原因补充:

(最多只允许输入30个字)