C++单例模式

转载于 C++单例模式

单例(Singleton)模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。

下面举例,懒汉模式(用到的时候才实例化):

     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     
     
//头文件  
class Singleton  {  
     public:  
         static Singleton& Instance(){   //Instance()作为静态成员函数提供里全局访问点  
             if(instance ==  NULL)       //如果还未实例化,即可实例话,反之提供实例的引用  
                instance =  new Singleton;  
             return *instance;          //返回指针的话可能会误被 delete,返回引用安全一点  
        }  
     private:  
        Singleton();           //这里将构造,析构,拷贝构造,赋值函数设为私有,杜绝了生成新例  
        ~Singleton();  
        Singleton( const Singleton&);  
        Singleton&  operator=( const Singleton&);  
  
         static Singleton *instance;
};

注意 上面的例子并不是线程安全的。所以实例化的过程应放在初始化阶段执行。

Scott Meyers在《Effective C++》提出一种更优雅的单例模式:

     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     
     
//头文件  
class Singleton  {  
     public:  
         static Singleton& Instance() {      //Instance()作为静态成员函数提供里全局访问    
             static Singleton instance;  
             return instance;  
        }  
  
     private:  
        Singleton(); 
        ~Singleton();  
        Singleton( const Singleton&);  
        Singleton&  operator=( const Singleton&);  
};

注意 有依赖编辑器执行的标准,C++11之后是线程安全的。


欢迎关注我的微博

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值