c++ - Cocos2d-x自定义内存模型有哪些优势?

标签 c++ memory cocos2d-x smart-pointers dynamic-memory-allocation

当我最近开始在 Cocos2d 中进行开发时,我发现的第一个非常奇特的特性是 Objective-C 风格的自动释放池内存模型。在我使用 c++ 的所有经验中,我避免使用任何形式的动态内存分配,除非绝对必要(这实际上非常罕见)。

起初,我很困惑为什么 Cocos2D 没有利用更安全的替代方法来创建指针对象(例如智能指针),但后来我遇到了 this线程,讨论了 shared_ptr<class T> 的缺点(其中最重要的是速度)关于手动保留/释放方法的当前内存范例。

然后我想,“为什么不简单地定期分配一个对象,并在必要时传递和存储它的引用呢?”我知道将 Cocos2d-x 的整个内存系统移植到一个新的范例会非常耗时,但从长远来看,使用更稳定的惯用 c++ 代码难道不值得吗?

归根结底,与常规对象分配相比,当前内存模型有哪些优势?

最佳答案

游戏引擎中的内存管理是一个非常具体的主题,尤其是当您想让引擎易于使用时。如果您看一下 Unreal Engine 4,他们在生成反射代码的内存管理方法方面走得更远。一般来说,无需显式调用 retainrelease 就可以创建 cocos2d-x 游戏。这些方法首先在您需要手动延长对象的生命周期以避免删除它并再次创建它(缓存)时使用。

共享指针会使语法更加复杂,并且会导致动态转换和绑定(bind)指针作为参数的额外困难。更重要的是,您必须将 weak_ptr 与 shared 一起使用,以避免交叉引用,这也需要额外的努力。

基本上 shared_ptr 是一种像 intrusive_ptr 一样的引用计数技术,它可以更自然地集成到 cocos2d-x 中。而cocos中的addChild/removeChild等函数都是子对象的递增和递减计数器,所以这些范式并不像乍看起来那么多样化。

关于c++ - Cocos2d-x自定义内存模型有哪些优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36671965/

相关文章:

c++ - 结构化输出

c++ - 类方法访问它的数据成员

c++ - 在将它交换到 coco2dx 中的另一个之后,如何将 Sprite 恢复为原始图像?

c++ - 友元函数默认模板 : Intel ICPC warning

c++ - openGL视频显示

c++ - VS2012编译器奇怪的内存释放问题

c++ - 将字符串映射到 C++ 中的类函数

java - Android facebook webdialog 网络错误 (netstack : lib_mgr error)

C++使用指向父类(super class)的指针查找子类的类型

memory - 经典 RISC 管道 - "memory access"阶段实际上做了什么?