我有一个对象需要是“全局的”,我需要能够从我的其他类 .h 和 .cpp 文件中访问它。我不确定如何解决这个问题,所以让我更详细地描述一下这个问题。
我有一个名为 CoreEnvironment 的类。此类在最低级别包含我的引擎的核心,例如:渲染、网络、物理和寻路。此类的实例一次只能存在一个,并且在应用程序的整个生命周期中都存在。我的第一个想法是将其创建为单例,但经过研究后,有很多关于使用单例的负面评论,我也不完全理解如何创建单例。在我的研究中,我看到了“Extern”关键字的使用,但我不清楚它的用法。
这是类的框架:
class CoreEnvironment
{
NetHandler* m_NET;
NetPoint* Server;
PhysicsHandler* m_Physics;
irr::IrrlichtDevice* Device;
irr::ITimer* Timer;
public:
CoreEnvironment();
~CoreEnvironment();
bool RunDevice();
void Update();
} CoreEnv;
我的引擎中有一些更高级别的类,例如:ActorHandler 和 WorldHandler。在这两个类的 .cpp 文件中,我需要访问 CoreEnv。如果我只是简单地#include "CoreEnvironment.h",则每次包含该文件时都会创建另一个 CoreEnv 实例,但我需要访问已初始化的原始实例。
整个结构可能是不正确的方法。非常感谢任何解决此问题或更有效方法的提示或建议。感谢您的宝贵时间。
最佳答案
不要在头文件中定义对象实例。在那里提供声明并在单个 cpp 文件中定义对象。例如,
核心环境.h
class CoreEnvironment
{
NetHandler* m_NET;
NetPoint* Server;
PhysicsHandler* m_Physics;
irr::IrrlichtDevice* Device;
irr::ITimer* Timer;
public:
CoreEnvironment();
~CoreEnvironment();
bool RunDevice();
void Update();
};
extern CoreEnvironment CoreEnv;
核心环境.cpp
#include "CoreEnvironment.h"
CoreEnvironment CoreEnv;
如果只有两个其他类需要访问 CoreEnv
对象,也许您应该重新考虑是否需要全局实例。相反,像这样的东西可能就足够了。
int main()
{
CoreEnvirnment CoreEnv;
ActorHandler actor(CoreEnv);
WorldHandler world(CoreEnv);
// do stuff with actor and world
}
ActorHandler
和 WorldHandler
的构造函数采用(可能是 const
)对 CoreEnvironment
的引用。
关于c++ - 创建全局 C++ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24710768/