构造函数私有,因此无法通过构造函数实例化,唯一的方法就是通过调用静态函数GetInstance
#include <iostream>
using namespace std;
// 单例模式:懒汉式和饿汉式
// 懒汉式
class SingletonLazy
{
private:
SingletonLazy() {}; // 私有构造函数,外部不能直接new对象
public:
static SingletonLazy* GetInstance()
{
// 懒汉式, new完返回
if (pLazy == NULL)
{
pLazy = new SingletonLazy;
}
return pLazy;
}
private:
static SingletonLazy* pLazy;
};
SingletonLazy* SingletonLazy::pLazy = NULL;
// 饿汉式
class SingletonHungry
{
private:
SingletonHungry() {};
public:
static SingletonHungry* GetInstance()
{
// 饿汉式,直接返回
return pHungry;
}
private:
static SingletonHungry* pHungry;
};
SingletonHungry* SingletonHungry::pHungry = new SingletonHungry;
void test_lazy()
{
SingletonLazy* lazy1 = SingletonLazy::GetInstance();
SingletonLazy* lazy2 = SingletonLazy::GetInstance();
if (lazy1 == lazy2)
{
cout << "懒汉式: 是同一块内存" << endl;
}
delete lazy1;
delete lazy2;
}
void test_hungry()
{
SingletonHungry* hungry1 = SingletonHungry::GetInstance();
SingletonHungry* hungry2 = SingletonHungry::GetInstance();
if (hungry1 == hungry2)
{
cout << "饿汉式: 是同一块内存" << endl;
}
delete hungry1;
delete hungry2;
}
int main(int argc, char* argv[])
{
// 懒汉式
test_lazy();
// 饿汉式
test_hungry();
system("pause");
return 0;
}