【发布时间】:2014-12-11 12:12:50
【问题描述】:
我有一个std::vector<Character*>,它将包含Character 的几个不同的派生类,出于这个问题的目的,我将称之为Enemy1、Enemy2 和Player。我见过其他情况,有人有一个数组,例如Character characters[30],但由于我需要多态性,我认为这对我不起作用(我可能错了)。
基本上我的问题是实现,我如何设置/缓存多个字符以便以这种方式重用?我在看这个(http://gameprogrammingpatterns.com/object-pool.html),我不确定向量是否可以以同样的方式工作。例如,如果向量中的一个对象已经用new Enemy1() 实例化,我以后可以覆盖它并将其设置为new Enemy2() 吗?我应该为每种敌人类型设置单独的向量/数组吗?
【问题讨论】:
-
可能更好的方法是
std::vector<std::unique_ptr<Character>>或std::vector<std::shared_ptr<Character>>。请参阅Dynamic memory management。 -
我看了视频,实际上还不错,但是不为不存在的对象调用缓存仍然需要与使用
new实例化对象并将其插入到相同的努力地图? -
您添加和删除字符的频率如何?足以保证一个游泳池?如果这确实是您的瓶颈,请考虑努力重载 new,然后为游戏实体/角色创建一个内存池。作为附带的好处,您还可以获得监控堆分配和跟踪内存泄漏的能力。