C++学习笔记day44-----C++98-单例模式

3、单例模式(设计模式中的一种)
1) 概念:
一个类只允许存在唯一对象,并提供它的访问方法
2) 实现单例模式的方法:
–>禁止在类的外部创建对象:私有化构造函数
–>类的内部维护唯一的对象:静态成员变量(语法要求)
–>提供该类唯一对象的访问方法:静态的成员函数(只能用静态)
3) 实现方法:
–>饿汉式:无论用不用,程序启动即创建
–>懒汉式:用时即创建,不用即销毁
class A{};

#include <iostream>
using namespace std;
//饿汉式
class Singleton{
public:
    //提供访问单例对象的结果
    static Singleton &getInstance(void){
        return s_instance;
    }
    void print(void)const{
        cout << m_data << endl;
    }
private:
    //私有化构造函数
    Singleton(int data):m_data(data){}
    Singleton(const Singleton&);
    //使用一个静态成员维护单例
    static Singleton s_instance;
    int m_data;
};
Singleton Singleton::s_instance(12345);
//静态成员在类的外部的全局区初始化,是语法规定。并不是在真正意义上在类的外部访问了私有成员变量。
int main(void){
    Singleton::getInstance().print();
    return 0;
}
#include <iostream>
using namespace std;
//懒汉式
class Singleton{
    public:
        //提供访问单例对象的结果,并创建对象
        static Singleton &getInstance(void){
            ++count;
            if(s_instance == NULL){
                s_instance = new Singleton(12345);
            }
            return *s_instance;
        }
        //打印
        void print(void)const{
            cout << m_data << endl;
        }
        //不用时释放
        //可以被多个“人”使用,应该是最后一个使用调用着release时才去释放。
        void release(void){
            --count;
            if(count == 0){
                delete s_instance;
                s_instance = NULL;
            }
        }
        //析构函数
        ~Singleton(void){  
        }
    private:
        //私有化构造函数
        Singleton(int data):m_data(data){}
        Singleton(const Singleton&);
        //使用一个静态成员维护单例
        static Singleton *s_instance;
        //记录使用单例对象的人数
        static int count;
        int m_data;
};
Singleton count = 0;
Singleton *(Singleton::s_instance) = NULL;
int main(void){
    Singleton::getInstance().print();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值