#include <string>
using namespace std;
//单例模式 第一种方式 懒汉式
class CSingleDemo1
{
public:
static CSingleDemo1* getInstance();
virtual void Display();
private:
CSingleDemo1();
~CSingleDemo1();
class CGarbol
{
public:
CGarbol(){};
~CGarbol()
{
if(CSingleDemo1::m_pSingle)
{
delete CSingleDemo1::m_pSingle;
CSingleDemo1::m_pSingle = NULL;
cout << "单例唯一实例销毁" << endl;
}
}
};
static CGarbol garbol;
static CSingleDemo1* m_pSingle;
};
//单例模式 第二种方式 饿汉式
class CSingleDemo2
{
public:
static CSingleDemo2* getSingleton();
void Display();
private:
CSingleDemo2();
};
#include <iostream>
#include "test.h"
CSingleDemo1* CSingleDemo1::m_pSingle = NULL;
CSingleDemo1::CSingleDemo1()
{
}
CSingleDemo1::~CSingleDemo1()
{
}
CSingleDemo1* CSingleDemo1::getInstance()
{
if(!m_pSingle)
{
m_pSingle = new CSingleDemo1();
return m_pSingle;
}
}
void CSingleDemo1::Display()
{
cout << "我是第一种单例模式" << endl;
}
CSingleDemo2::CSingleDemo2()
{
}
CSingleDemo2* CSingleDemo2::getSingleton()
{
static CSingleDemo2 single;
return &single;
}
void CSingleDemo2::Display()
{
cout << "我是第二种单例模式" << endl;
}
调用代码:
CSingleDemo1* single1 = CSingleDemo1::getInstance();
single1->Display();
CSingleDemo2* single2 = CSingleDemo2::getSingleton();
single2->Display();
说明:在实际开发过程中,由于调用了一个单例模式,该单例的构造方法是public的。在调用时候,采用了CSingleDemo1* singleton = new CSingleDemo1();调用,这样的结果就是导致不断的初始化Singleton类,内存很快会耗尽,应用速度变慢。所以,单例模式的构造方法最好定义private,并且通过CSingleDemo1->getInstance()调用。