单例模式:要求一个类有且只有一个实例(对象)
那首先先说一下访问限定符:
public: 可以在类中(本类、子类、其他类)、类外访问
protected: 可以在本类、以及子类中访问
private: 只可以在本类类中访问
那么我的理解是:如果只能有一个对象,那么肯定与构造函数有关,所有对象的初始化都要经过构造函数,那么对构造函数的访问设定权限控制,放在私有下,那么就只能在本类中访问了。
单利模式分为:懒汉模式和饿汉模式,下面代码展示了区别,饿汉模式在类中就已经生成对象了,而懒汉模式是在main函数中调用的时候才生成对象。你可以试试,用时间代码测一下,饿汉模式自然要快一点。
#include<iostream>
#include<time.h>
using namespace std;
//单例模式
class Singleton
{
public:
static Singleton* getinstance()
{
if(instance==NULL)
{
instance=new Singleton();
}
return instance;
}
private:
Singleton()
{
}
static Singleton* instance;
};
Singleton* Singleton::instance=new Singleton();//饿汉模式,过早创建实例,降低内存效率
Singleton* Singleton::instance=NULL;//懒汉模式
int main()
{
time_t start,end;
start=clock();
Singleton* sing=Singleton::getinstance();
end=clock();
return 0;
}