MaNGOS阅读笔记 (1)

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 actionsthis 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.blogjava.net/zellux/archive/2008/04/07/191365.html

2. Explicit Constructors
game/WorkPacket.h中看到的语法,防止构造函数中参数的隐式转型
比如explicit String(int n); 用String('c')声明时就会报错

你可能感兴趣的:(MaNGOS阅读笔记 (1))