//只有一个实例,所以我们不能把构造函数借口暴露给用户(否则用户可以创建很多个)。//所以采用一个静态成员函数static Singleton* getInstance();来获取实例。
//单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例
#include <stdio.h>
#include <iostream>
using std::cout;
using std::endl;
//要求:在内存之中只能创建一个对象
//1. 该对象不能是全局对象或者栈对象
//2. 只能是堆对象
//作用:
// 在一定程序上,它是可以取代全局变量
class Singleton
{
public:
static Singleton * getInstance()
{ //所以采用一个静态成员函数static Singleton* getInstance();来获取实例。
if(_pInstance == NULL)
{
_pInstance = new Singleton;
}
return _pInstance;
}
static void destroy()
{
if(_pInstance)
delete _pInstance;
}
private:
Singleton(){
cout << "Singleton()" << endl;
}
~Singleton(){
cout << "~Singleton()" << endl;
}
private:
static Singleton * _pInstance;//用来保存第一次new的指针,,为了使p1,p2相同,所有还需要一个static
};
Singleton * Singleton::_pInstance = NULL;
//Singleton s3;
int main(void)
{
// Singleton s1;//Error, 它会调用默认构造函数
// Singleton s2;//通过语法规则让改语句无法编译通过,把它放在private区域
Singleton * p1 = Singleton::getInstance();
Singleton * p2 = Singleton::getInstance();
Singleton * p3 = Singleton::getInstance();
printf("p1 = %p\n", p1);
printf("p2 = %p\n", p2);
printf("p3 = %p\n", p3);
//delete p1;//Error通过语法规则让语句无法编译通过
Singleton::destroy();
return 0;
}