首页 > 代码库 > 【cocos2d-x 学习笔记 02】对象创建方式比较
【cocos2d-x 学习笔记 02】对象创建方式比较
1. 创建对象实例的方式比较
一般C++对象创建代码:
Object *obj = new Object(arg1, arg2); delete obj;
一般C++对象在其构造函数中完成初始化操作,同时new出来的对象需要自己负责释放。
cocos2d-x中对象创建代码:
Object *obj = Object::create();
cocos2d-x中通过调用类的静态函数create()返回对象的指针,new出的对象由cocos2d-x自己的内存管理机制负责释放,因此不用担心内存释放问题。create()函数一般有三个操作:
1)创建对象,构造函数中不包含复杂逻辑,仅仅只负责初始化成员变量。
2)调用对象的初始化函数,如init()、initWithXX()等,返回bool值标识初始化是否成功。
3)调用对象继承自基类Ref的函数autorelease(),交由cocos2d-x负责内存的释放。
Object *Object::create() { Object *obj = new Object; if (obj && obj->init()) { obj->autorelease(); } else { delete obj; obj = nullptr; } return obj; }
cocos2d-x 中提供了宏CREATE_FUNC(__TYPE__)来完成上面的create()函数定义,不过它只能创建无参数的create()函数,如果需要在create()函数中传入参数还是的自己写。
2. 优缺点
一般C++创建对象的方式,直观符合一般的C++编程习惯,缺点是需要自己负责资源的释放(这一点可以使用共享指针std::shared_ptr来最大限度避免出错)。
cocos2d-x创建对象的方式,其在构造函数中初始化成员变量,在初始化函数中完成对象的初始化工作,在类的静态函数create()中完成前两步并将内存交由其内部的内存管理机制管理。可能有点绕弯,但是一旦习惯用起来还是很好的。这种方式最大的优点在于不用担心new出的对象的释放问题,所以比较适用于类继承自Ref的情况,这样可以获得cocos2d-x所带来的内存自动管理的好处。
3. 总结
在编写自己的类时,如果类功能较多考虑继承自类 Ref,以获得内存自动管理,并使用cocos2d-x的对象创建风格。如果类的功能很单一,例如Vec2、Size这样的类,考虑使用一般的C++风格来创建对象实例。
【cocos2d-x 学习笔记 02】对象创建方式比较
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。