Ogreゲームエンジン日記
C++におけるSingletonの実装について調べてみた。
Ogreというオープンソースのゲームエンジンがあり、そのソースを調べた。
OgreRoot.h(少し削ったソース)
template <typename T> class Singleton { protected: static 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 ); } }; }
GamePrograming Gemsでも見かけたAutoSingletonパターンになっている。
問題なのは利用側はインスタンスを一つだけどこかで作るように心がけないといけないことだろうか(?)
単純ですっきりしているので、結構よさそう。何かSingletonしないといけないときには利用しよう。
(そもそもあまりSingletonにすべきではないのだが)