Nebula3中有两种形式的单例:
1.使用__DeclareSingleton宏定义的单例,这是一种在线程中的单例。在每个线程中只有一个对象,但在整个应用程序中可能会有多个。
把__DeclareSingleton宏展开如下:
public:
ThreadLocal static type * Singleton;
static type * Instance() { n_assert(0 != Singleton); return Singleton; };
static bool HasInstance() { return 0 != Singleton; };
可以看见我们定义了一个由ThreadLocal修饰的静态属性,在types.h中,我们可以看到ThreadLocal是如下定义的:
#if __WIN32__
#define ThreadLocal __declspec(thread)
简单地说__declspec(thread)声明一个线程局部变量并具有线程存储时限,以便链接器安排在创建线程时自动分配的存储。
在Nebual3引擎中大量地使用这种形式的单例,这和整个的Nebula3的多线程架构设计相关。
2.使用__DeclareInterfaceSingleton宏定义单例,这就是全局单例了,在整个应用程序中只存在一个对象。
展开__DeclareInterfaceSingleton宏:
static type * Singleton;
static type * Instance() { n_assert(0 != Singleton); return Singleton; };
static bool HasInstance() { return 0 != Singleton; };
Moving to github
9 年前
没有评论:
发表评论