最近学习了下《head first设计模式》,先对单例模式做个简单的总结。
单例模式用一句话概括就是只产生一个对象,那为啥不用全局变量来代替单例模式呢?
全局变量是程序在一开始就创建好对象,如果这个对象非常耗费资源,程序的执行又用不到它,那就太浪费了。而单例可以在需要它的时候再创建它。
//2013-4-10 10:07
//单例设计模式
class MySingleton
{
public:
~MySingleton();
static MySingleton* GetInstance();
private:
MySingleton();
};#include "singleton.h"
MySingleton::~MySingleton()
{
}
MySingleton::MySingleton()
{
}
MySingleton* MySingleton::GetInstance()
{
static MySingleton* pInstance = new MySingleton();
return pInstance;
}int main(int argc,char* argv[])
{
MySingleton* pMySingleton = MySingleton::GetInstance();
MySingleton* pMySingleton1 = MySingleton::GetInstance();
delete pMySingleton;
delete pMySingleton1;
return 0;
}//singleton.h
#pragma once
#include <iostream>
using namespace std;
class MySingleton
{
private:
static MySingleton* pInstance;
public:
static MySingleton* GetInstance();
class SingletonGarbo // 它的唯一工作就是在析构函数中删除CSingleton的实例
{
public:
~SingletonGarbo()
{
//测试用
cout<<"SingletonGarbo::~SingletonGarbo()"<<endl;
if (0 != MySingleton::pInstance)
{
delete MySingleton::pInstance;
MySingleton::pInstance = 0;
}
}
};
private:
MySingleton();
~MySingleton();//防止在不合适的地方释放了
};//singleton.cpp
#include "singleton.h"
MySingleton* MySingleton::pInstance = 0;
MySingleton::SingletonGarbo garbo;
MySingleton::~MySingleton()
{
}
MySingleton::MySingleton()
{
}
MySingleton* MySingleton::GetInstance()
{
if ( pInstance == 0)
{
pInstance = new MySingleton();
}
return pInstance;
}if ( pInstance == 0)
//线程1访问,刚好到此时间片轮换
{
pInstance = new MySingleton();
}
return pInstance;//线程2开始执行
if ( pInstance == 0)
{
pInstance = new MySingleton();
}
return pInstance;MySingleton* MySingleton::GetInstance()
{
lock();
if ( pInstance == 0)
{
pInstance = new MySingleton();
}
unlock();
return pInstance;
}MySingleton* MySingleton::GetInstance()
{
if ( pInstance == 0)
{
lock();
if ( pInstance == 0)
{
pInstance = new MySingleton();
}
unlock();}
return pInstance;
}head first设计模式之单例模式 c++解读,布布扣,bubuko.com
原文:http://blog.csdn.net/xinpo66/article/details/23365469