Chapter21 单例模式

单例模式简介

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

通常我们可以让一个全局变量使的一个对象被访问,但它不能防止你实例化多个对象。一个最好的方法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一份访问该实例的方法。

单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎样访问它以及何时访问它。简单的说就是对唯一实例的受控访问。

多线程的单例,需要用lock确保当一个线程位于代码的临界区时,另一个线程不能进入临界区。如果其他线程进入锁定的临界区,则它将一直等待,直到该锁被释放。

单例模式UML类图

Chapter21 单例模式

C++代码实现

// Singleton类
#ifndef _SINGLETON_HPP 
#define _SINGLETON_HPP 

class Singleton{
public:
    static Singleton* getInstance(){
        if(nullptr == pInstance) {
            pInstance= new Singleton();
        }
        return pInstance;
    }
private:
    Singleton(){};
    static Singleton* pInstance;
};

Singleton* Singleton::pInstance = nullptr; // cpp 静态变量不允许类内初始化,必须类外。

#endif
// 客户端程序
#include<iostream>
#include"singleton.hpp"

using namespace std;

int main(){
    Singleton* p1 = Singleton::getInstance();   
    Singleton* p2 = Singleton::getInstance();   

    if(p1 == p2 && p1){
        cout << "p1 and p2 pointers to the same instance which is not null"<<endl;
    }

    getchar();
    return 0;
}

 

原文链接: https://www.cnblogs.com/yb-blogs/p/12597238.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    Chapter21 单例模式

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/377645

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月3日 下午1:37
下一篇 2023年3月3日 下午1:41

相关推荐