Posted on 2008-06-03 19:03
ZelluX 閱讀(777)
評論(0) 編輯 收藏 所屬分類:
C/C++ 、
Laboratory
1. framwork/policies/Singleton.h
Singleton模式,可以指定相應的線程模型、創建策略和生命期控制策略。
對于全局范圍的Singleton實例,定義了若干個宏便于訪問,例如
#define?sLog?MaNGOS::Singleton<Log>::Instance()
#define?sMaster?MaNGOS::Singleton<Master>::Instance()

Singleton的定義:


namespace?MaNGOS
{
????template
????????<
????????typename?T,
????????class?ThreadingModel?=?MaNGOS::SingleThreaded<T>,
????????class?CreatePolicy?=?MaNGOS::OperatorNew<T>,
????????class?LifeTimePolicy?=?MaNGOS::ObjectLifeTime<T>
????????>
????????class?MANGOS_DLL_DECL?Singleton
????{
????????public:
????????????static?T&?Instance();
????????protected:
????????????Singleton()?{};
????????private:
????????????//?Prohibited?actions
this?does?not?prevent?hijacking.
????????????Singleton(const?Singleton?&);
????????????Singleton&?operator=(const?Singleton?&);
????????????//?Singleton?Helpers
????????????static?void?DestroySingleton();
????????????//?data?structure
????????????typedef?typename?ThreadingModel::Lock?Guard;
????????????static?T?*si_instance;
????????????static?bool?si_destroyed;
????};
}
#endif
不知道這里的注釋Prohibited actions...this does not prevent hijacking.是什么意思,copy constructor和hijacking有什么關系呢?
另外注意這行typedef typename ThreadingModel::Lock Guard;,原來typedef還可以用在函數上。
Singleton的Instance方法用的是標準的double-checked lock方法,關于DCL可以參考這篇博文http://www.tkk7.com/zellux/archive/2008/04/07/191365.html
2. Explicit Constructors
game/WorkPacket.h中看到的語法,防止構造函數中參數的隱式轉型
比如explicit String(int n); 用String('c')聲明時就會報錯