•   欢迎来到21NN网.
  •   请记住本站网址www.21nn.cn

C++设想形式浅识单例形式【C#.Net教程】,C++,设计模式,单例模式

摘要: 什么是单例形式?保证一个类只要一个实例,并供应一个接见它的全局接见点。【DP】让类的本身担任保留它的唯一实例,这个类保证没有其他实例能够被建立,而且此类能够供应一个接见该实例的要领。【...
什么是单例形式?

保证一个类只要一个实例,并供应一个接见它的全局接见点。【DP】

让类的本身担任保留它的唯一实例,这个类保证没有其他实例能够被建立,而且此类能够供应一个接见该实例的要领。【DP】

什么时候须要单例形式?

顺序只须要一个要领掌握某项功用,不允许建立第二个此功用。比方:银行运用的取号机。

运用单例形式须要相识C++static关键字的用法我的这篇博文对static作了浅析

测试用例:

[code]int main(){
    //单例形式初始化两个实例的要领
    Singleton *s1 = Singleton::getInstance();
    Singleton *s2 = Singleton::getInstance();

    if(s1 == s2)
        std::cout << "Two the objects are the same instance.\n";
    else
        std::cout << "Two the objects are the different instance.\n";

    return 0;
}

单例形式完成:

[code]class Singleton{
private:
    //将组织函数声明为私有的,从而保证只允许类内运用
    Singleton(){}
    //声明一个类的静态对象(类外初始化)
    static Singleton *instance;
public:
    //静态成员要领,供应一个接见唯一实例的全局接见点。即供应接口建立对象
    static Singleton* getInstance(){
        if(instance != NULL){
            instance = new Singleton;
        }
        return instance;
    }
};
//类外部初始化静态成员变量(静态成员变量必需被初始化)
Singleton* Singleton::instance = NULL;

附:若为多线程编程情况下,须要加锁并做两次推断是不是为空。

[code]class Singleton{
private:
    //将组织函数声明为私有的,从而保证只允许类内运用
    Singleton(){}
    //声明一个类的静态对象(类外初始化)
    static Singleton *instance;
public:
    //静态成员要领,供应一个接见唯一实例的全局接见点。即供应接口建立对象
    static Singleton* getInstance(){

        if(instance != NULL){

            lock(syncObj){
               if(instance != NULL){
                   instance = new Singleton;
               }//if
            }//lock
        }//if
        return instance;
    }
};
//类外部初始化静态成员变量(静态成员变量必需被初始化)
Singleton* Singleton::instance = NULL;

加lock是为了两个线程只要一个进入,另一个线程列队期待。第一个线程进入并出来后,后者才进入。第二个判空是为了保证第一个线程建立了实例,第二个线程进入后就不再建立实例。

以上就是C++设想形式浅识单例形式的内容,更多相关内容请关注ki4网(www.ki4.cn)!

分享到:

发表评论

评论列表

还没有评论,快来说点什么吧~

公众号二维码

微信公众号