引擎由各种子系统构成。引擎启动时需要考虑子系统启动的顺序问题。比如A依赖B的话那么就应该先启动B再启动A,终止的时候应该先终止A再终止B。
C++的静态初始化次序(是不可用的)
一般用单例类来使用子系统(管理器) 实例用全局变量来避免使用动态内存,如:
class RenderManager
{
public:
RenderManager()
{
//启动管理器...
}
~RenderManager()
{
//终止管理器...
}
};
//单例一个实例
static RenderManager gRenderManager;
然而,C++全局变量的建构,析构顺序是没有办法直接控制的,所以这种方法行不通。
按需架构
C++有一个特性:函数内声明的静态变量并不会与main()之前建构,而是在第一次调用该函数时才建构。于是可采用如下的代码
class RenderManager
{
public:
//取得唯一实例
static RenderManager& get()
{
//此函数中的静态变量将于函数被首次调用时建构
static RenderManager sSingleton;
return sSingleton;
}
RenderManager()
{
//对于需依赖的管理器,先通过调用他们的get()启动它们
VideoManager::get();
TextureManager::get();