[cocos2dx笔记014]一个用于cocos2dx的对象智能指针模板
2014-08-01 11:34
363 查看
现在C++智能指针有无数个实现了,多一个也无所谓。哈。
这个智能指针是专门为cocos2dx 2.2.x定制的。主要是为了方便使用,同时又要遵循现有的cocos2dx的内存管理。特实现这样一个智能指针。在使用的时候不需要考虑retain或release操作,也不需要new或delete操作!
下面是实现代码
例子:
这个智能指针是专门为cocos2dx 2.2.x定制的。主要是为了方便使用,同时又要遵循现有的cocos2dx的内存管理。特实现这样一个智能指针。在使用的时候不需要考虑retain或release操作,也不需要new或delete操作!
下面是实现代码
//在很多时候,类的成员是CCObject的子对象,为了保证对其正常使用,又要遵循cocos2dx的内存管理,特实现了这样的一个智能指针,方便使用。 #ifndef _X_COCOS_PTR_H_ #define _X_COCOS_PTR_H_ namespace zdh { template<class T> class XCocosPtr { public: XCocosPtr() :m_Object(nullptr) {} XCocosPtr(T * paramObject) :m_Object(paramObject) { if (m_Object != nullptr) { m_Object->retain(); } } XCocosPtr(const XCocosPtr & paramPtr) :m_Object(paramPtr.m_Object) { if (m_Object != nullptr) { m_Object->retain(); } } ~XCocosPtr() { ptr_release(); } //重载赋值运算符 XCocosPtr & operator = (T * paramObject) { set(paramObject); return *this; } XCocosPtr & operator = (XCocosPtr & paramObject) { set(paramObject.m_Object); return *this; } //重载比较运算符 bool operator == (T * paramObject) const { return m_Object == paramObject; } bool operator != (T * paramObject) const { return m_Object != paramObject; } //重载*运算符 T & operator*() { return *m_Object; } const T & operator*() const { return *m_Object; } //重载->运算符,使其可以像指针那样使用 T * operator ->() { return m_Object; } const T * operator ->() const { return m_Object; } //判断对象是否为空 bool is_null() const { return m_Object == nullptr; } //判断对象是否为不空 bool is_not_null() const { return m_Object != nullptr; } //创建对象 这里会使用调用对象的create来创建对象 T * create() { T * pNewObject = T::create(); set(pNewObject); return pNewObject; } //设置对象 void set(T * paramObject) { if (m_Object != paramObject) { T * p = m_Object; m_Object = paramObject; if (m_Object != nullptr) { m_Object->retain(); } if (isNotNULL(p)) { p->release(); } } } //取对象 T * get() { return m_Object; } //这里没有使用release这个名称,是为了防止和object的release混淆 void ptr_release() { if (m_Object != nullptr) { m_Object->release(); m_Object = nullptr; } } private: T * m_Object; }; } #endif
例子:
//类的数据成员定义: XCocosPtr<CCSprite> m_Sprite; //在init中 m_Sprite = CCSprite::create(""); //或 m_Sprite.create()
相关文章推荐
- [cocos2dx注意事项014]一个用于cocos2dx对象智能指针模板
- Item 13:使用对象(智能指针)来管理资源 Effective C++笔记
- [C++学习笔记14]动态创建对象(定义静态方法实现在map查找具体类名对应的创建函数,并返回函数指针,map真是一个万能类)good
- Item 17:在单独的语句中将new的对象放入智能指针 Effective C++笔记
- 一个智能指针模板的实现及应用
- effective c++ Item 17: 在一个独立的语句中将 new 出来的对象存入智能指针
- 一个智能指针模板的实现及应用
- 一个类似auto_ptr<>用于动态分配数组的智能指针
- 用于管理new动态分配对象的智能指针
- 如何实现一个带引用记数的智能指针模板
- C++ 智能指针的一个实现(基于模板和Shared_ptr)
- c++ 模板学习笔记:类模板模拟auto_ptr智能指针(权哥)
- 两层指针共用一个智能指针控制基本对象的操作--成员访问操作符
- 孙鑫VC学习笔记:第十三讲 (五) 保存可串行化的类对象 如何获取文档与视类指针
- 条款17:以独立语句将newed对象置入智能指针
- c++对象模型笔记:指针类型转换
- 智能指针auto_prt的使用(c++学习笔记)
- C++箴言:将new出来的对象存入智能指针
- 新生帖:一个用于字符串数组的智能排序类,用于相似度的对比!
- ITK 中的智能指针与对象工厂演示-1