【问题标题】:Why to create global objects in heap?为什么要在堆中创建全局对象?
【发布时间】:2018-09-22 13:22:19
【问题描述】:

当我阅读 ogre3d、opengl 或物理框架的教程时,所有对象(Window、SceneManager 对象)都是在堆中创建的?

他们是否使用堆来表示“对象指针已被破坏但堆对象仍然存在(超过对象)”?

抱歉英语不好

【问题讨论】:

  • 请提供minimal reproducible example,但即使这样也很难猜出别人的意图
  • 在谈到 3d 或物理框架时,术语“对象”的含义与 C++ 编程中的相同术语不同。 you 所说的“对象”是什么意思?您是指 C++ 方式中的对象,您可以在其中使用 new C++ 关键字创建对象吗?如果你这样做了,那么请编辑你的问题,因为 Ogre3d 并不真正相关,请详细说明你遇到的问题以及你想知道的问题。
  • 一般来说,对象只能在栈或者堆上创建。堆栈的大小和生命周期都是有限的,因此通常需要在堆上创建需要较长时间的较大对象。

标签: c++ object heap-memory


【解决方案1】:

可能的原因有很多:

  1. 这只是偶然的,不必要的:

    • 作者不知道更好。并非所有教程作者都是专家,他们也不一定会完善教程代码。
    • 作者根据一个重要的完整项目对教程进行建模,但原因在教程中丢失了。
  2. 因为对象很大。这是反对使用自动对象的论据,但与静态对象并不真正相关。

  3. 因为需要延迟初始化。

    • 这允许更好的错误处理,并避开静态初始化顺序失败
    • 这也可以通过首次使用时初始化不需要动态分配的习惯用法来实现。
  4. 框架选择使用一种特殊的单例模式,该模式依赖于动态分配的单例,因为框架会自动删除它们。我知道 Ogre::LogManager 就是这种情况。

【讨论】:

    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2012-05-14
    • 1970-01-01
    • 2015-06-23
    • 2016-02-27
    • 2017-09-15
    相关资源
    最近更新 更多