目标:内存中只能有一份对象
#include <stdio.h>
#include <iostream>
//1. Singleton不能为栈对象,如果为栈对象,可以在fun1,fun2,main中创建很多个,那就只能通过是堆对象
//2. 不能直接通过new表达式来创建堆对象,如果通过new的方式创建的对象地址都不同
//3. 位于public区域getInstance函数不能是普通成员函数,如果getInstance是普通函数,需要对象调用,而我们
要创建对象,矛盾.所以只能是static.static函数只能访问static数据.
class Singleton
{
public:
static Singleton * getInstance()
{
if(pInstance == NULL)
{
pInstance = new Singleton;
}
return pInstance;
}
private:
Singleton()
{
std::cout << "Singleton()" << std::endl;
}
private:
static Singleton *pInstance;
};
Singleton * Singleton::pInstance = NULL;
void fun1()
{
}
void fun2()
{
}
int main(void)
{
//Singleton *p = new Singleton;
Singleton *p1 = Singleton::getInstance();
Singleton *p2 = Singleton::getInstance();
printf("p1 = %x\n", p1);
printf("p2 = %x\n", p2);
return 0;
}