Ogre::Singleton 筆記
先看代碼
創(chuàng)建對(duì)象
OGRE_NEW CgFxScriptLoader();
銷毀對(duì)象
OGRE_DELETE CgFxScriptLoader::getSingletonPtr();
類
不同于有些將singleton對(duì)象聲明為static,ogre將對(duì)象的指針聲明為static
1、節(jié)省全局靜態(tài)存儲(chǔ)區(qū)空間。每個(gè)singleton只會(huì)占用全局靜態(tài)存儲(chǔ)區(qū)一個(gè)指針?biāo)玫目臻g。
2、可以手動(dòng)刪除這個(gè)對(duì)象。如果將對(duì)象聲明為singleton,不能手動(dòng)刪除吧。
3、構(gòu)造的時(shí)候可以使用參數(shù),很靈活。
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
};

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

創(chuàng)建對(duì)象

銷毀對(duì)象

類
- Ogre::Singleton< T >
- Ogre::Singleton< ArchiveManager >
- Ogre::Singleton< CompositorManager >
- Ogre::Singleton< ControllerManager >
- Ogre::Singleton< DistanceLodStrategy >
- Ogre::Singleton< DynLibManager >
- Ogre::Singleton< ExternalTextureSourceManager >
- Ogre::Singleton< FontManager >
- Ogre::Singleton< GpuProgramManager >
- Ogre::Singleton< HardwareBufferManager >
- Ogre::Singleton< HighLevelGpuProgramManager >
- Ogre::Singleton< LodStrategyManager >
- Ogre::Singleton< LogManager >
- Ogre::Singleton< MaterialManager >
- Ogre::Singleton< MeshManager >
- Ogre::Singleton< OverlayManager >
- Ogre::Singleton< ParticleSystemManager >
- Ogre::Singleton< PixelCountLodStrategy >
- Ogre::Singleton< Profiler >
- Ogre::Singleton< ProgramManager >
- Ogre::Singleton< ProgramWriterManager >
- Ogre::Singleton< RenderSystemCapabilitiesManager >
- Ogre::Singleton< ResourceBackgroundQueue >
- Ogre::Singleton< ResourceGroupManager >
- Ogre::Singleton< Root >
- Ogre::Singleton< SceneManagerEnumerator >
- Ogre::Singleton< ScriptCompilerManager >
- Ogre::Singleton< ShaderGenerator >
- Ogre::Singleton< ShadowTextureManager >
- Ogre::Singleton< SkeletonManager >
- Ogre::Singleton< TerrainGlobalOptions >
- Ogre::Singleton< TextureManager >
不同于有些將singleton對(duì)象聲明為static,ogre將對(duì)象的指針聲明為static
1、節(jié)省全局靜態(tài)存儲(chǔ)區(qū)空間。每個(gè)singleton只會(huì)占用全局靜態(tài)存儲(chǔ)區(qū)一個(gè)指針?biāo)玫目臻g。
2、可以手動(dòng)刪除這個(gè)對(duì)象。如果將對(duì)象聲明為singleton,不能手動(dòng)刪除吧。
3、構(gòu)造的時(shí)候可以使用參數(shù),很靈活。
posted on 2011-06-12 20:47 的筆記 閱讀(509) 評(píng)論(0) 編輯 收藏 引用