将游戏数据加载到没有全局变量的池中

时间:2015-01-30 20:13:43

标签: c++ multithreading globals

我正在通过TELNET编写一个基于文本的游戏,用于我自己在C ++中的娱乐。我根据游戏方面/组件创建了一个类层次结构,例如车辆,行人,玩家,车辆,自行车等。

我正在考虑实现一个“Pool”对象,该对象将存储指向特定加载元素的指针。我正在考虑在池中使用 Add()函数,该函数将根据我想要添加到池中的元素的类重载。问题如下:假设我想让这个元素池(或它上面的某个层)始终可用。也许我需要一个函数 GetAllVehicles()(只是一个简单的例子),它会查看池数据并返回一个带有一堆指针的数组中的所有车辆。

问题是,如果我想在代码中的某个地方浏览此池,该怎么办?从某种意义上说,Pool对象本身应该是 global ,因为你想要在任何地方访问你加载的游戏元素,而不必永久地传递创建的对象。但是,我不希望它污染全局命名空间,我想要多线程,因此声明一个全局变量将是一个特别糟糕的主意。

问题很简单:我该怎么做才能使这项工作?

1 个答案:

答案 0 :(得分:0)

一种方法是在main函数中创建一个实例,并将实例传递给使用它的每个函数,或者传递给需要池的对象的构造函数。

另一种可能性是Singleton设计模式。

问题的两边都有火焰龙(Singleton vs.传递物体)。选择你自己的毒药。