Singleton模式C++

来源:互联网 发布:人工智能 库布里克 编辑:程序博客网 时间:2024/06/05 20:56

为什么需要singleton模式呢,因为有时候需要保证一个类仅有一个实例,并且提供一个访问它的全局访问点。
比如游戏里面只有一件的厉害的装备,比如屠龙刀,倚天剑只有一把。

懒汉模式

class Singleton{public:    static Singleton* Instance();protected:    Singleton(){}private:    static Singleton* _instance;};Singleton* Singleton::_instance = NULL;Singleton* Singleton::Instance(){    if (_instance == NULL)        _instance = new Singleton;    return _instance;}

使用懒汉模式时,Singleton在程序第一次调用的时候才会初始化自己,代码同上。使用该模式时,由于if语句的存在,会影响调用的效率。而且,在多线程环境下使用时,为了保证只能初始化一个实例,需要用锁来保证线程安全性,防止同时多个线程进入if语句中。如果遇到处理大量数据时,锁会成为整个性能的瓶颈。一般懒汉模式适用于程序一部分中需要使用Singleton,且在实例化后没有大量频繁访问或线程访问的情况。

使用饿汉模式时,Singleton在程序一开始就将自己实例化,之后的Instance方法仅返回实例的指针即可,这样就解决了上述提到的if语句影响效率的问题

饿汉模式

class Singleton{public:    static Singleton* Instance();protected:    Singleton(){}private:    static Singleton* _instance;};Singleton* Singleton::_instance = new Singleton();Singleton* Singleton::Instance(){    return _instance;}

参考:
[1]. https://www.tianmaying.com/tutorial/singleton
[2]. 《设计模式》

原创粉丝点击