单例模式示例

#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()调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值