[cocos2dx注意事项014]一个用于cocos2dx对象智能指针模板
现在,C++有许多实现智能指针,一个更无所谓。哈。
这种智能指针是专为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对象智能指针模板的更多相关文章
- C++中指向对象的常指针和指向常对象的指针
指向对象的常指针 将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变. Time t1(10,12,15),t2; Time * const ptr1=&am ...
- ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象
http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value (存一个对象的时候key存) 将哈希 ...
- Windows台cocos2d-x 3.2下载一个新的项目,创造的过程
首先,左右cocos2d-x于windows下一个Android建筑环境, 引用一个网友这个博客<cocos2d-x 3.0rc开发指南:Windows下Android环境搭建>. 这里简 ...
- [cocos2dx注意事项009]试用quick-cocos2dx-2.2.4
quick-cocos2d-x 在中国站http://quick.cocoachina.com/?page_id=40,用他们自己的话说:quick-cocos2d-x(后文简称 quick)与 co ...
- 做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk
前言:”懒”在这里当然不是贬义词,而是追求高效,拒绝重复劳动的代名词!做一个懒COCOS2D-X程序猿的系列文章将教会大家在工作中如何偷懒,文章篇幅大多较短,有的甚至只是几行代码,争取把懒发挥到极致! ...
- Cocos2d-x 3.0 打造一个全平台概念文件夹
Cocos2d-x 3.0 打造一个全平台概念文件夹http:// www.eoeandroid.com/thread-328055-1-1.html
- 【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识
自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书写速度. 下面我们就来一起学习一下Cocos ...
- [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND
原文:cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND 上一篇文章介绍了cocos2d-x的基本渲染结构,这篇顺着之前的渲染结构介绍渲染命令QUA ...
- [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND
原贴: cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND 上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处 ...
随机推荐
- HDU 3217 Health(状压DP)
Problem Description Unfortunately YY gets ill, but he does not want to go to hospital. His girlfrien ...
- Application.mk中APP_ABI 的含义
我们在编写JNI代码时有一个可选的文件Application.mk ,这个文件你可以不创建,但是有时候是有必要写一个这样的文件的. Application.mk文件用于描述应用程序本身的一些属性信息, ...
- Spark技术内幕:Stage划分及提交源代码分析
当触发一个RDD的action后.以count为例,调用关系例如以下: org.apache.spark.rdd.RDD#count org.apache.spark.SparkContext#run ...
- pygame系列
在接下来的blog中,会有一系列的文章来介绍关于pygame的内容,pygame系列偷自http://www.cnblogs.com/hongten/p/hongten_pygame_install. ...
- jps查看java进程中哪个线程在消耗系统资源
jps或ps -ef|grep java可以看到有哪些java进程,这个不用说了.但值得一提的是jps命令是依赖于/tmp下的某些文件 的. 而某些操作系统,定期会清理掉/tmp下的文件,导致jps无 ...
- 神经网络BP算法C和python代码
上面只显示代码. 详BP原理和神经网络的相关知识,请参阅:神经网络和反向传播算法推导 首先是前向传播的计算: 输入: 首先为正整数 n.m.p.t,分别代表特征个数.训练样本个数.隐藏层神经元个数.输 ...
- 设备Oracle当误差:环境不符合要求》》解决方法
一旦安装Oracle当我常常会遇到这样的问题.也没太在意,改了一下client\stage\cvu文件夹cvu_prereq.xml档(添加支持目前的操作系统信息)为了克服,我没有做笔记,但后来有同学 ...
- Spring Bean的作用域(转)
Spring Bean的作用域 .singleton [单例] eg:<bean id="personService" class="com.yinger.ser ...
- Java 序列化Serializable详解(附详细例子)
Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization ...
- IOS --- 日期时间格式 更改
1.怎样怎样将一个字符串如" 20110826134106"装化为随意的日期时间格式.以下列举两种类型: NSString* string =@"201108261 ...