【发布时间】:2019-02-14 06:30:47
【问题描述】:
我正在用 C++ 编写一个游戏,我遇到了这个设计问题:
我在游戏中的所有对象都有一个名为Entity 的基类。为了使用继承,我将指针存储在我的octree 中。在我的游戏中,有些对象将由其他对象的方法创建。问题是:我可以在哪里存储以这种方式创建的对象,以便它在游戏期间保持不变,以便我存储的指针有效?
我不想使用new,因为我可能会以这种方式创建数百甚至数千个对象,而且我听说new 非常慢。
到目前为止,我想出的唯一方法是拥有一个存储所有这些对象的大向量。该向量可能会被初始化为一个巨大的大小,这样它就不必调整自己的大小并弄乱我的指针。不过,这似乎很愚蠢。
【问题讨论】:
-
“虽然这看起来相当愚蠢” 为什么?为游戏中的所有实体设置一个经理(某种形式)是很常见的
-
祝你的项目好运!除了您查看gameprogrammingpatterns.com 的建议之外,我没有具体建议 - 它有点谈到这种事情。
-
我不知道“大型”游戏中的内存是如何处理的,但即使是游戏,您也不应该担心性能首先。首先要编写好的、可读的、可理解的、可测试的和可维护的代码。然后您测量、基准测试和配置文件以找到瓶颈并优化它们(使用大量的 cmets 和文档,因为优化往往会使代码变得不可读和不可维护)。请记住,足够好通常就是足够好。
-
如果在分析之后你发现内存分配确实是一个瓶颈,有很多方法可以实现你自己的内存分配系统,很多都可以在互联网上免费获得(或者作为完成的开源代码,或者用您可以自己实现的算法记录)。
-
除非您的目标平台是一个土豆,否则使用
new分配数千个对象绝对没问题,尽管我建议使用智能指针来隐藏混乱的内存管理。
标签: c++ oop dynamic-allocation