顾名思义:
单例模式,指的是仅有一个(类)实例。
即:
在应用程序的整个生命周期中,任何时刻,某个类(单例类)仅存在唯一一个实例。
同时仅提供一个全局访问点。
单例的实现一般要求满足:
(1) 类构造函数私有
(2) 提供一个全局访问点 一般是静态的共有方法
一、单例的经典实现
代码如下:
class Singleton
{
public:
// 全局访问点
static Singleton *getInstance()
{
if (pInstance == NULL)
{
pInstance = new Singleton;
}
return pInstance;
}
private:
static Singleton *pInstance; // 唯一实例
Singleton();
};
单例经典实现的缺陷:
在多线程并发的情况下,多个线程同时调用getInstance()方法,可能会出现pInstance = NULL
这时候会同时创建多个线程。
二、单例的多线程下实现("双重锁")
代码如下:
CSingleton.h
#pragma once
#ifndef _CSINGLETON_H_
#define _CSINGLETON_H_
#include <iostream>
struct CCriticalSection
{
public:
void