当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

基础知识:C++设计模式之Singleton

    一、功能
 
  保证一个类仅有一个实例。

  二、优缺点

  singleton模式是做为\"全局变量\"的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变量不具备的性质:同类型的对象实例只可能有一个。

  三、实现

  教科书上的singleton定义如下:

 class singleton
{
public:
static singleton* instance() ;
protected:
singleton() {}
private:
static singleton *_instance ;
singleton(const singleton&) ;
singleton& operator=(const singleton&) ;
} ;

singleton* singleton::_instance = null ;

singleton* singleton::instance()
{
(_instance == null) ? _instance = new singleton() : 0 ; //lazy initialization
return _instance ;
}


  (1)因为返回的是指针,为防止用户调用delete函数,可把static singleton *_instance;改为在instance()中定义static singleton _instance。这样显然更安全,同时也具有lazy initialization的特性(即第一次访问时才创建)。

  (2)假设需要从singleton派生子类,而子类也需要有同样的性质,既只能创建一个实例。我觉得,这很难办。根本原因在于instance()函数不是虚函数,不具有多态的性质。一种常用方法是把instance()函数移到子类中,这时就只能用static singleton *_instance,而不能用static singleton _instance了,除非把_instance也要移到子类,无论怎么做都不优雅。另一种方法是用模板。具体用什么方法,只能根据实际情况权衡。

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接