目前,我的游戏引擎中的模块都是按命名空间组织的。它们具有类的构造函数和析构函数类似的Open()和Close()函数,在游戏输入左侧时被调用。
这些模块的示例包括:物理管理器、实体管理器、I/O处理程序、渲染管理器。
现在,我开始觉得让所有模块的变量“散落”在那里,并通过链接器以全局方式导出不好。
将模块从命名空间重构为类会带来以下开销:
必须有一个全局控制器,允许不同模块之间的交互,通过提供对它们的实例的访问
模块之间的交互会多出一个函数调用和1-2个指针解除引用的额外开销
并且会有以下优点:
- 符合RAII规范
- 所有状态都可以打包到一个CState类中,其中包含模块的实例
- 有助于确保资源正确删除和分配
我的问题:
- 我应该考虑将我的引擎模块从命名空间重构为管理类吗?为什么(不)?