Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

6年前关闭。



Improve this question




现代C++功能在多大程度上像:
  • 多态性,
  • STL,
  • 异常安全/处理,
  • 具有基于策略的类设计的
  • 模板
  • 智能指针
  • 新建/删除,展示位置新建/删除

  • 在游戏工作室中使用?我很想知道库的名称和它们使用的C++功能。例如,Orge3D使用所有现代C++功能,包括异常和智能指针。换句话说,如果我正在寻找使用现代C++的游戏库的示例,那么我将去Orge3D。但是我不知道这些功能是否会阻止游戏工作室使用Orge3D。

    此外,我不知道是否还有其他示例。例如,我之前曾短暂使用过Box2D,但它仅使用placement new和class关键字作为C++功能。由于所有成员都是公开的,因此甚至在这些类中的封装也被破坏。

    理想情况下,如果C++功能在所有情况下都是最佳匹配,则将最常使用这些功能。但是似乎没有。阻抗是多少?显而易见的是必须阅读一stack书,但这只是一半的原因。这个问题是对“C++ for Game Programming - Love or Distrust?”的跟进(从响应中我得到的印象是,游戏中仍然没有使用许多C++功能;这不一定是应该的方式)。

    最佳答案

    我曾在两家游戏公司工作过,看过许多代码库,并在游戏开发人员中观察了诸如此类问题的许多辩论,因此我可能可以提出一些意见。对于每个问题的简短回答是,同一工作室中不同工作室之间甚至团队之间的差异都很大。详细答案如下:

  • 多态性,

  • 一些工作室使用,但其他工作室则不使用。许多团队仍然喜欢避免这种情况。虚拟函数调用确实要付出一定的代价,而且即使在现代控制台上,有时也要付出明显的代价。在那些确实使用多态性的工具中,我愤世嫉俗的假设是只有一小部分人会很好地使用它。
  • STL,

  • 出于多种原因,将中间分割开。 STL易于错误使用,因此许多工作室都基于这些理由选择避免使用它。在大量使用它的用户中,许多人将其与自定义分配器配对。 EA创建了EASTL,它解决了STL在游戏开发中引起的许多问题。
  • 异常安全/处理,

  • 很少有工作室使用异常处理。现代控制台的第一个建议之一是关闭RTTI和异常。 PC游戏可能会使用异常来产生更大的效果,但是在主机工作室中,异常经常被避开。它们增加了代码大小,这可能是非常宝贵的,并且在某些相关平台上实际上不支持代码大小。

    具有基于策略的类设计的
  • 模板

  • 基于策略的设计...我还没有遇到过。模板经常用于自省(introspection)/反射(reflection)和代码重用。当我阅读Alexandrescu的书时,基于策略的设计对我来说似乎是一个有缺陷的 promise 。我怀疑它在游戏行业中的使用率很高,但是各个工作室之间的差异很大。
  • 智能指针

  • 许多使用多态和STL的工作室都采用了智能指针。控制台游戏中的内存管理非常重要,因此许多人不喜欢引用计数智能指针,因为它们在释放时并不确定,但是它们肯定不是唯一的一种智能指针。总体而言,智能指针的想法仍在受到关注。我认为这将在2-3年内变得越来越普遍。
  • 新建/删除,展示位置新建/删除

  • 这些经常使用。通常会覆盖它们以在下面使用自定义分配器,以便可以跟踪内存并轻松发现泄漏。

    我想我同意你的结论。在游戏工作室中,C++的使用程度不尽人意。这样做有好有坏的原因。好的是因为性能或内存问题,坏的是因为人们陷入了困境。从很多方面来说,按照他们一贯的方式去做是有意义的,如果这意味着C语言的C++有限,那么C语言的C++有限。但是,仍有许多反C++偏见在 float ……有些理由成立,有些则没有。

    07-24 09:45
    查看更多