【问题标题】:c++ - caching objectsc++ - 缓存对象
【发布时间】:2014-12-11 12:12:50
【问题描述】:

我有一个std::vector<Character*>,它将包含Character 的几个不同的派生类,出于这个问题的目的,我将称之为Enemy1Enemy2Player。我见过其他情况,有人有一个数组,例如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,然后为游戏实体/角色创建一个内存池。作为附带的好处,您还可以获得监控堆分配和跟踪内存泄漏的能力。

标签: c++ caching


【解决方案1】:

可以从std::vector<Character*> 访问您的角色。但是,要为许多可能的字符类型创建数据池,通常需要单独的向量*。

看看我最近问过的Related question。我得到了这个 article 参考,您可能会觉得有用。

*注意:我相信,通过一些技巧,可以将各种类型存储在一个向量中,只要它们在内存中的大小相同。

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 2015-09-03
    • 2012-06-06
    • 2012-10-14
    • 2018-05-27
    • 2012-06-13
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多