18 对象的使用(二)

来源:互联网 发布:js 控制class active 编辑:程序博客网 时间:2024/06/06 13:03

static与单例模式

保证一个类只有一个实例,并提供一个全局访问点

#include <iostream>using namespace std;class Singleton{public:    static Singleton* GetInstance()    {        if (instacne_ == NULL)        {            instacne_ = new Singleton;        }        return instacne_;    }    ~Singleton()    {        cout<<"~Singleton ..."<<endl;    }private:    Singleton(const Singleton& other);    Singleton& operator=(const Singleton& other);    Singleton()    {        cout<<"Singleton ..."<<endl;    }    static Singleton* instacne_;};Singleton* Singleton::instacne_;int main(void){    //Singleton s1;    //Singleton s2;    Singleton* s1 = Singleton::GetInstance();    Singleton* s2 = Singleton::GetInstance();    //Singleton s3(*s1);        // 调用拷贝构造函数    return 0;}

只构造了一个对象,调用了一次构造函数,单例模式
单例模式不会调用析构函数。
这里写图片描述

#include <iostream>using namespace std;class Singleton{public:    static Singleton& GetInstance()//引用    {        static Singleton instance;      // 局部静态对象        return instance;    }    ~Singleton()    {        cout<<"~Singleton ..."<<endl;    }private:    Singleton(const Singleton& other);    Singleton& operator=(const Singleton& other);    Singleton()    {        cout<<"Singleton ..."<<endl;    }};int main(void){    Singleton& s1 = Singleton::GetInstance();//引用    Singleton& s2 = Singleton::GetInstance();    return 0;}

输出
使用引用,调用析构函数。

0 0