首先,我们先不考虑多线程的问题,只是就单例模式的执行过程进行分析。
在百度上,我们可以轻松的查找到单例模式的使用场景:一个类只有一个对象实例,并提供一个访问它的全局访问点。
那么,①单例模式的类只提供私有的构造函数,不然new一下就直接生成一个对象了
②类定义中含有一个该类的静态私有对象
③该类提供一个静态的公有函数用于创建或获取它本身的静态私有对象
下面,我们来看看懒汉式式怎么写的(所谓懒汉式,就是它懒得创建,只在显式创建的时候才去创建)
#include<iostream>
using namespace std;
class Singelton
{
private:
static Singelton* m_singer;
static int m_count;
private:
Singelton()
{
m_singer = NULL;
m_count = 0;
cout << "构造函数Singlton...do" << endl;
}
public:
static Singelton *getInstance()
{
if (m_singer == NULL)
{
m_singer = new Singelton;
m_count++;
}
return m_singer;
}
static void FreeInstance()
{
if (m_singer != NULL)
{
delete m_singer;
m_singer = NULL;
m_count = 0;
}
}
static void printT()
{
cout << "m_count:" << m_count << endl;
}
};
Singelton *Singelton::m_singer = NULL;
int Singelton::m_count = 0;
void main()
{
cout << "演示 懒汉式" << endl;
//懒汉式:只有在使用的时候,才去创建对象
Singelton *p1 = Singelton::getInstance();
Singelton *p2 = Singelton::getInstance();
Singelton *p3 = Singelton::getInstance();
if (p1 != p2)
{
cout << "不是同一个对象" << endl;
}
else
{
cout << "是同一个对象" << endl;
}
p1->printT();
p2->printT();
Singelton::FreeInstance();
Singelton::FreeInstance();
system("pause");
}