最近在学c++,浅谈一下最近的学习成果吧
有些杂乱,请见谅
class Singelton
{
public:
static Singelton * Getintance()
{
if(m_p == NULL)
{
m_p = new Singelton;
}
return m_p;
}
static void destoryintance()
{
delete m_p;
m_p = NULL;
}
static int Getcount()
{
return count;
}
~Singelton()
{
Singelton::count--;
}
private:
Singelton()
{
Singelton::count++;
}
static Singelton *m_p;
static int count;
};
int Singelton::count = 0;
Singelton *Singelton::m_p = NULL;
int main()
{
Singelton *p = NULL;
p = Singelton::Getintance();
cout << Singelton::Getcount()<<endl;
Singelton *q= NULL;
q = Singelton::Getintance();
cout << p << endl;
cout << q << endl;
这是一个23种设计模式种的一个,单例模式,他只能创建一个对象,不能创建多个,是23种编程模式中唯一一个不适用虚函数的模式。
开始先给大家科普一个知识,在C++中类的定义可以有两种关键字定义,struct和class,大家常见的是class,struct在c++中也是定义类的关键字写法,class定义的类如果里面没有写明private和public的话默认私有private,struct默认共有public。好了我们开始简介单例模式吧,
这个类私有了他的构造器,所以不能通过常规方式调用默认构造器来实体化类,只能通过间接的方式来调用,首先定义一个私有的自己类类型的一个指针,我们要构造这个类只能通过这个指针在堆上构造。
static Singelton * Getintance()
{
if(m_p == NULL)
{
m_p = new Singelton;
}
return m_p;
}
通过这个共有的函数,定义一个返回值为本类的返回函数,在这里面我们判断该类的指针,如果为null的话就创造一个空间让这个指针指上去,如果在调用这个函数时指针已经有值了就放回这个指针不在创建新的类实体,这是这个单例模式的精髓,在使用时我们先定义一个sington类型的指针,这个指针和类中的m_p是同一类型,所以通过直接调用这个函数来实现构造器的功能,开辟一片空间,让后这个指针就是你创建的类实体,是不是很奇妙的,没有构造器却通过指针的间接调用实现了创建一个类实体,(static 是定义一个实体变量,让后可以通过类名.调用,不需要实体化一个类,带static的变量都得在类外初始化)。destroy函数,销毁一个实体类,释放空间,一个getcount 获得count值来在主函数里面验证能否初始化,~sington()函数来调用销毁初始化的类,在程序最后,在这里面cout--,来看是否销毁成功(这里不太严谨大佬勿怪),遮掩我们就可以在主程序实现函数了,就实现了单例功能,这里发现p和q是同一个应为get函数指正创建m_p为空的类,这就实现了单例功能的实现,这只是一个示例重点在那个指针和get函数,大家明白就好,今天就到这里,各位lukey!