C++ - 整个程序持续时间的单个本地类实例

Res*_*Rep 5 c++ oop class-design class

我正在使用C++开发一个lil'游戏引擎,并决定全部使用OOPily(大量使用类.)它的目的是(理论上)跨平台,所以我有一个'Engine'类,一个实例这是由'OS模块'创建的,它是WinMain for Windows(我首先开发它的平台.)

我有三个主要问题:

  1. 创建一个只在整个应用程序中实例化一次的类被认为是不好的做法吗?也许是因为使用类而不是一堆函数会产生某种性能损失或增加的开销?

  2. 我一直计划让WinMain创建Engine实例作为局部变量.Engine类相当大,包含用于渲染,脚本解析,文件系统等的类.基本上,除了OS特定代码之外,整个游戏引擎将以某种形式包含在Engine类中(可能作为实例)另一个类.)在WinMain函数中创建一个非常大的Engine类的本地实例是一个坏主意吗?在程序启动时创建类时创建本地实例是一个坏主意,并在程序结束时结束?也许新的会更好?

  3. 我的计划(i/wa)将引擎分成'模块',每个模块由一个类表示.Engine类将包含几乎所有其他模块的实例,如上所述,渲染,文件系统交互等.从某些角度(性能,设计,可读性?)使用类作为大型模块的容器是一个坏主意

谢谢你的帮助 :)

And*_*rei 4

游戏引擎不是跨平台的主要候选者,因为它们通常涉及与低级 API(不是跨平台)的有效交互。

类的大小取决于它包含的成员变量,而不是它实现的函数的数量。

堆栈空间通常很小 ( http://msdn.microsoft.com/en-us/library/ms686774%28v=vs.85%29.aspx ),而堆理论上与可用 RAM 一样大。因此,如果您有很大的东西,请将其存储在堆上(使用 new )。

“启动画面”:不要在程序开始时完成所有工作。用户讨厌当他们运行程序并且屏幕上没有显示任何内容时,因为您的程序正忙于初始化某些内容...查找惰性实例化,基本上不做可以等待并始终在屏幕上显示某些内容的事情。

至于具体答案: 1. 不会,假设没有虚函数,应该不会有性能开销。2. 请参阅上面的“启动画面”和“有限的堆栈空间”。3. 模块化通常很好,只需确保每个类确实/代表一个“事物”。但不要有太多的类,以至于你开始忘记它们的名称和用途:)