C++:单例模式:修订间差异

来自WHY42
imported>Soleverlee
(以“这是CEGUI源码中的单例模式实现模版: <source lang="cpp> #include <cassert> template <typename T> class CEGUIEXPORT Singleton { protected: static #i...”为内容创建页面)
 
imported>Soleverlee
无编辑摘要
 
(未显示同一用户的1个中间版本)
第1行: 第1行:
这是CEGUI源码中的单例模式实现模版:
这是CEGUI源码中的单例模式实现模版:
<source lang="cpp>
<source lang="cpp">
#include <cassert>
#include <cassert>
template <typename T> class CEGUIEXPORT Singleton
template <typename T> class CEGUIEXPORT Singleton
第29行: 第29行:
};
};
</source>
</source>
下面是它的system类,使用了这个单例模版:
<source lang="cpp">
class CEGUIEXPORT System :
    public Singleton<System>{
...
static System& getSingleton(void);
static System* getSingletonPtr(void);
}


System& System::getSingleton(void)
{
return Singleton<System>::getSingleton();
}
System* System::getSingletonPtr(void)
{
return Singleton<System>::getSingletonPtr();
}
</source>
[[Category:Programe]]
[[Category:Programe]]

2015年11月7日 (六) 06:38的最新版本

这是CEGUI源码中的单例模式实现模版:

#include <cassert>
template <typename T> class CEGUIEXPORT Singleton
{
protected:
    static
#ifdef __MINGW32__
    CEGUIEXPORT
#endif
    T* ms_Singleton;

public:
    Singleton( void )
    {
        assert( !ms_Singleton );
        ms_Singleton = static_cast<T*>(this);
    }
   ~Singleton( void )
        {  assert( ms_Singleton );  ms_Singleton = 0;  }
    static T& getSingleton( void )
        {  assert( ms_Singleton );  return ( *ms_Singleton );  }
    static T* getSingletonPtr( void )
        {  return ( ms_Singleton );  }

private:
    Singleton& operator=(const Singleton&) { return this; }
    Singleton(const Singleton&) {}
};

下面是它的system类,使用了这个单例模版:

class CEGUIEXPORT System :
    public Singleton<System>{
...
static	System&	getSingleton(void);
static	System*	getSingletonPtr(void);
}

System&	System::getSingleton(void)
{
	return Singleton<System>::getSingleton();
}

System*	System::getSingletonPtr(void)
{
	return Singleton<System>::getSingletonPtr();
}