当前位置:   article > 正文

设计模式-单例模式demo程序

设计模式-单例模式demo程序

设计模式-单例模式

免责声明:以下程序仅供自己参考使用,如果有好的编程建议,可以提出,感激不尽

懒汉模式

可以考虑最简单的实现方式,利用static特性实现

class SingleModeDemo
{
public:

	static SingleModeDemo& Instance()
	{
		static SingleModeDemo instance;
		return instance;
	}

private:
	SingleModeDemo() {}
	SingleModeDemo(const SingleModeDemo&) = delete;
	SingleModeDemo& operator=(const SingleModeDemo&) = delete;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

饿汉模式

采用双重锁定检查方式,同时使用c++的atomic模板保证按照设想方式执行程序

/*
	demo.h
*/

#pragma once

#include <atomic>
#include <mutex>

class SingleModeDemo
{
public:

	static SingleModeDemo& Instance()
	{
		SingleModeDemo* inst = m_instance.load();
		if (inst == NULL)
		{
			std::lock_guard<std::mutex> lock(m_mutex);
			inst = m_instance.load();
			if (inst == NULL)
			{
				inst = new SingleModeDemo;
				m_instance.store(inst);
			}
		}
		return *inst;
	}

private:
	SingleModeDemo() {}
	SingleModeDemo(const SingleModeDemo&) = delete;
	SingleModeDemo& operator=(const SingleModeDemo&) = delete;

	static std::mutex m_mutex;
	static std::atomic<SingleModeDemo*> m_instance;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

由于使用到了static的类成员,所以需要在实现中定义成员

/*
	demo.cpp
*/
#include "demo.h"

std::mutex SingleModeDemo::m_mutex;
std::atomic<SingleModeDemo*> SingleModeDemo::m_instance;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/171971
推荐阅读
相关标签
  

闽ICP备14008679号