【发布时间】:2021-01-17 07:59:31
【问题描述】:
我浏览了虚幻引擎源代码,发现它们使用自己的容器类,例如内部动态数组。但是 C++ STL 提供了(几乎)所有必要的容器类。那么他们为什么要花时间再次开发相同的容器呢?开发人员使用std::vector 之类的容器编写代码,而不是尝试使用引擎中的TArray 类来弄清楚如何做事情,不是更容易吗?
【问题讨论】:
-
历史,也许? Development on the engine began in 1995,而the first public implementation of the STL had only been released in 1994。 Sweeney 当时可能认为它不够成熟,即使开发人员后来改变了主意,也可能没有充分的理由去麻烦转换所有现有代码。
-
虚幻使用它自己的反射和GC。
-
@NateEldredge 在相当长的一段时间内,STL 容器的性能确实很差。 John Carmack 在接受采访时表示,在 Doom 3 开发期间(~2002-2004),STL 基本上甚至不是最前沿的游戏开发的选择。他们还为这些东西推出了自己的库。
-
作为从事我自己的大型项目的人,我可以根据我的经验说,有时,您会发现自己需要为您的项目量身定制的功能,而 C++ STL 不提供这些功能。我的项目中的一个这样的功能是能够将元素表示为指向项目基类类型对象的指针(如果可能)(std::vector 无法提供)。此外,我发现自己只想在这个项目中尽可能少地依赖标准库。
-
@TrecApps 不完全是题外话,请问为什么?对于一个新项目,以下答案中给出的原因并不真正适用。我建议尽可能使用 STL,并且仅在绝对必要时编写自己的东西。
标签: c++ game-engine c++-standard-library