OGRE1.7 3D图形引擎2:singleton,Smart Point,Memory Manager

OGRE1.7 3D图形引擎2:singleton,Smart Point,Memory Manager,第1张

概述      singleton模式是软件工程中的一个术语,他是一种设计模式,将类的实例化个数限制在一个。Ogre也提供了相应的模板 template <typename T> class Singleton。只需通过该模板创建的类,既可以使用Class::getSingleton()方式获取类的唯一实例。Ogre中不少类使用了singleton设计模式:大量的Manager类,Profiler类,

      singleton模式是软件工程中的一个术语,他是一种设计模式,将类的实例化个数限制在一个。Ogre也提供了相应的模板 template <typename T> class Singleton。只需通过该模板创建的类,既可以使用Class::getSingleton()方式获取类的唯一实例。Ogre中不少类使用了singleton设计模式:大量的Manager类,Profiler类,Root类,这些整个程序运行过程中只有唯一实例的类都是使用singleton模板创建的。当你需要运行时只有一位实例的类时,你可以考虑使用singleton(每种设计模式都只能应付一部分问题,开发者觉得怎么简单怎么来,这里不强调用singleton代替其他单实例的设计模式)

    Smart Point,irrlicht绝大多数对象都继承于IReferenceCounted的类,该类提供了smart point的一些 *** 作-grab以及drop,这个和MacOS X下Cocoa中的NSObject是一样的(retain & release),在OGRE中,SharedPtr是smart point的模板,通过share和release *** 作。同样,对于smartPoint的优劣,我曾经和同事有过争论,最后的结论是,谁爱用谁用去,出了问题自己找。(忘记匹配造成内存泄漏是该模式最大的问题)


    关于内存管理,OGRE1.7提供了4种方式,在CMAKE生成项目的时候可以调整,生成以后也可以修改OgreBuildSettings.h中的额OGRE_MEMORY_ALLOCATOR 来更改方式,我生成项目的时候没更改过设置,默认使用的是OGRE_MEMORY_ALLOCATOR_NEDPOOliNG。几种不同的内存管理方式我没测过,有心的童鞋们可以试试看。OGRE的内存管理非常有趣,几乎为每种不同类型的对象创建了一个Alloc(见OgreMemoryAllocatorConfig.h,从下往上看),这些Alloc又对应于8种不同Allocatedobject模板。模板内的参数看似是不同的,再往里面一瞧,CategorisedAllocPolicy<Memorycategory Cat>中的Cat根本没起到任何作用。因此在默认情况下,所有的对象alloc的方式都指向了同一种方式。为啥要这么搞,注释写清楚了:这么写的目的只是笼统的给大家一个示例,绝大多数应用程序对象的alloc和dealloc都是统一处理的,当然,如果你有特殊需求的话,比如说某一个类型的object需要特殊的内存管理方式,你可以通过cat区分来使用不同的内存管理方针。如果你有需求,可以这么搞一下。对于大多数人都是没必要的


      简单描述了下ogre整个引擎的3个小点,虽然对于只是使用Ogre的人来说,这些部分都“不怎么重要”,但是我觉得对于要更改引擎,写一些插件或者编辑器,或者要理解整个引擎的人来说,还是应该把引擎一些基础模块都都看下。模块的分类参照

http://www.ogre3d.org/docs/api/html/modules.html ,对照着模块,看源代码。我觉得这样学习引擎会比较快,不明白的地方可以跳过,或者网上查。实在不行不求甚解,等看完了模块,看sample的时候,有些问题就自然懂了。:-)

总结

以上是内存溢出为你收集整理的OGRE1.7 3D图形引擎2:singleton,Smart Point,Memory Manager全部内容,希望文章能够帮你解决OGRE1.7 3D图形引擎2:singleton,Smart Point,Memory Manager所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1068244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存