的笔记

随时随地编辑

Ogre::Singleton 笔记

先看代码
 1    /** Template class for creating single-instance global classes.
 2    */

 3    template <typename T> class Singleton
 4    {
 5    private:
 6        /** \brief Explicit private copy constructor. This is a forbidden operation.*/
 7        Singleton(const Singleton<T> &);
 8
 9        /** \brief Private operator= . This is a forbidden operation. */
10        Singleton& operator=(const Singleton<T> &);
11    
12    protected:
13
14        static T* ms_Singleton;
15
16    public:
17        Singleton( void )
18        {
19            assert( !ms_Singleton );
20#if defined( _MSC_VER ) && _MSC_VER < 1200     
21            int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
22            ms_Singleton = (T*)((int)this + offset);
23#else
24        ms_Singleton = static_cast< T* >this );
25#endif
26        }

27        ~Singleton( void )
28            {  assert( ms_Singleton );  ms_Singleton = 0;  }
29        static T& getSingleton( void )
30        {    assert( ms_Singleton );  return ( *ms_Singleton ); }
31        static T* getSingletonPtr( void )
32        return ms_Singleton; }
33    }
;

创建对象
OGRE_NEW CgFxScriptLoader();

销毁对象
OGRE_DELETE CgFxScriptLoader::getSingletonPtr();



不同于有些将singleton对象声明为static,ogre将对象的指针声明为static
1、节省全局静态存储区空间。每个singleton只会占用全局静态存储区一个指针所用的空间。
2、可以手动删除这个对象。如果将对象声明为singleton,不能手动删除吧。
3、构造的时候可以使用参数,很灵活。

posted on 2011-06-12 20:47 的笔记 阅读(503) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理