C++单例模式的一种实现

C++单例模式的一种实现

//singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H

#include <iostream>
#include <mutex>

using namespace std;
class singleton  //单例的一种实现
{
private:
    static mutex mutex_obj;
    static int i;
    static singleton *singleton_p;

    singleton();
public:
    static singleton * Instance();
    static void print();
};

#endif // SINGLETON_H
//singleton.cpp
#include "singleton.h"

singleton* singleton::singleton_p=nullptr;
int singleton::i = 10;
mutex singleton::mutex_obj;

singleton::singleton(){
    i++;
    cout << "i:" << i << endl;
}

singleton * singleton::Instance(){
    if(singleton_p == nullptr){
    	//doing...
        mutex_obj.lock();
        if(singleton_p == nullptr){
            singleton_p = new singleton();
        }
        mutex_obj.unlock();
    }
    return singleton_p;
}

void singleton::print(){
    cout << "i:" << i << endl;
}
//main.cpp
#include <iostream>
#include "singleton.h"
using namespace std;

int main(int argc, char *argv[])
{
    singleton *p = singleton::Instance();
    cout << p << endl;
    p->print();

    p = singleton::Instance();
    cout << p << endl;
    p->print();
    
    return 0;
}

记C++单例模式的一种实现方式:
它在线程中是安全的;
实例在首次调用Instance函数时创建;
实例存在于堆中;
进程结束时释放;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值