Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

Ogreゲームエンジン日記

[C++][Ogre]Ogreゲームエンジン日記その1

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にすべきではないのだが)