单例模式示例

来源:互联网 发布:centos ftp客户端命令 编辑:程序博客网 时间:2024/06/14 16:58
#include <string>using namespace std;//单例模式 第一种方式 懒汉式class CSingleDemo1{public:    static CSingleDemo1* getInstance();    virtual void Display();private:    CSingleDemo1();    ~CSingleDemo1();    class CGarbol    {    public:        CGarbol(){};        ~CGarbol()        {            if(CSingleDemo1::m_pSingle)            {                delete CSingleDemo1::m_pSingle;                CSingleDemo1::m_pSingle = NULL;                cout << "单例唯一实例销毁" << endl;            }        }    };    static CGarbol garbol;    static CSingleDemo1* m_pSingle;};//单例模式 第二种方式 饿汉式class CSingleDemo2{public:    static CSingleDemo2* getSingleton();    void Display();private:    CSingleDemo2();};
#include <iostream>#include "test.h"CSingleDemo1* CSingleDemo1::m_pSingle = NULL;CSingleDemo1::CSingleDemo1(){}CSingleDemo1::~CSingleDemo1(){}CSingleDemo1* CSingleDemo1::getInstance(){    if(!m_pSingle)    {        m_pSingle = new CSingleDemo1();        return m_pSingle;    }}void CSingleDemo1::Display(){    cout << "我是第一种单例模式" << endl;}CSingleDemo2::CSingleDemo2(){}CSingleDemo2* CSingleDemo2::getSingleton(){    static CSingleDemo2 single;    return &single;}void CSingleDemo2::Display(){    cout << "我是第二种单例模式" << endl;}

调用代码:

    CSingleDemo1* single1 = CSingleDemo1::getInstance();    single1->Display();    CSingleDemo2* single2 = CSingleDemo2::getSingleton();    single2->Display();

说明:在实际开发过程中,由于调用了一个单例模式,该单例的构造方法是public的。在调用时候,采用了CSingleDemo1* singleton = new CSingleDemo1();调用,这样的结果就是导致不断的初始化Singleton类,内存很快会耗尽,应用速度变慢。所以,单例模式的构造方法最好定义private,并且通过CSingleDemo1->getInstance()调用。

0 0
原创粉丝点击