单例模式的几种实现及其比较

1.惰性实现

class Singleton{
    static Singleton singletonM;
     int i;
     Singleton(int x):i(x){}
     Singleton& operator=(Singleton&);
     Singleton(const Singleton&);
public:
     static Singleton& instance()
     {
         return singletonM;
     }
     int getValue(){ return i}
  
     void setValue(int x){ i=x ;}      
};

Singleton Singleton::s(48);

int main()
{
    static Singleton& s = Singleton::instance();
    cout<<s.getValue<<endl;

    static Singleton& s1. = Singleton::instance();
    s1.setValue(9);
    cout<<s.getValue()<<endl; 
}
创建单例模式关键是:
1.防止客户程序员获得任何控制其对象生存期的权利,因此必须将所有构造函数
声明为私有,并且防止编译器自动生成任何构造函数。
2.决定对象的创建方式。
这里是静态创建,称作惰性初始化。由于实例的创建不受客户程序员控制(在程序开始时初始化),所以
这种实现方式只有在对象创建代价不大,并且并不总是需要它的时候才有意义。


2.Meyers' singleton

class Singleton{
     int i;
     Singleton(int x):i(x){}
     Singleton& operator=(Singleton&);
     Singleton(const Singleton&);
public:
     static Singleton& instance()
     {  
          static Singleton s(47);
          return s;
     }
     int getValue(){ return i}
  
     void setValue(int x){ i=x ;}      
};
这种实现由Meyers最先提出(effective c++),故成为Meyers单例;实例在客户程序员调用 instance()时才会被

初始化。


3.template


4.线程安全

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值