现在,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对象智能指针模板的更多相关文章

  1. C++中指向对象的常指针和指向常对象的指针

    指向对象的常指针 将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变. Time t1(10,12,15),t2; Time * const ptr1=&am ...

  2. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象

    http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希 ...

  3. Windows台cocos2d-x 3.2下载一个新的项目,创造的过程

    首先,左右cocos2d-x于windows下一个Android建筑环境, 引用一个网友这个博客<cocos2d-x 3.0rc开发指南:Windows下Android环境搭建>. 这里简 ...

  4. [cocos2dx注意事项009]试用quick-cocos2dx-2.2.4

    quick-cocos2d-x 在中国站http://quick.cocoachina.com/?page_id=40,用他们自己的话说:quick-cocos2d-x(后文简称 quick)与 co ...

  5. 做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk

    前言:”懒”在这里当然不是贬义词,而是追求高效,拒绝重复劳动的代名词!做一个懒COCOS2D-X程序猿的系列文章将教会大家在工作中如何偷懒,文章篇幅大多较短,有的甚至只是几行代码,争取把懒发挥到极致! ...

  6. Cocos2d-x 3.0 打造一个全平台概念文件夹

    Cocos2d-x 3.0 打造一个全平台概念文件夹http:// www.eoeandroid.com/thread-328055-1-1.html

  7. 【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识

    自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书写速度. 下面我们就来一起学习一下Cocos ...

  8. [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND

    原文:cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND 上一篇文章介绍了cocos2d-x的基本渲染结构,这篇顺着之前的渲染结构介绍渲染命令QUA ...

  9. [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND

    原贴: cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND 上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处 ...

随机推荐

  1. Kafka - SQL 引擎

    Kafka - SQL 引擎分享 1.概述 大多数情况下,我们使用 Kafka 只是作为消息处理.在有些情况下,我们需要多次读取 Kafka 集群中的数据.当然,我们可以通过调用 Kafka 的 AP ...

  2. 水晶易表 Xcelsius 2008 安装指南 完美支持office2010(亲手体验)

    Xcelsius2008水晶易表是一款很好用的软件.网上已经有破解方法,大家能够尝试一下这款经典软件了. 可是网上对于安装破解过程介绍的不详细或者纷乱,今天我汇总了全部的方法最终成功的安装上了,而且支 ...

  3. pygame在安装过程中无法找到videodev.h错误

    首先参考<ubuntu 安装 pygame 非常好玩的东西>.在运行sudo python setup.py时.出现 linux/videodev.h:No such file or di ...

  4. error C2471: 无法更新程序数据库

    这段时间在使用VS做一个项目.在使用过程中,今天遇到了一个问题,也就是题目所说的那样: error C2471: 无法更新程序数据库.之后在网上搜了一下,得到了两种解决方案,两种方案分别如下: (一) ...

  5. 《Nginx文件类型错误解析漏洞--攻击演练》 (转)

    今天看书看到其中提到的一个漏洞,那就是Nginx+PHP的服务器中,如果PHP的配置里 cgi.fix_pathinfo=1 那么就会产生一个漏洞.这个配置默认是1的,设为0会导致很多MVC框架(如T ...

  6. java-IO操作性能对照

    在软件系统中.IO速度比内存速度慢,IO读写在非常多情况下会是系统的瓶颈. 在java标准IO操作中,InputStream和OutputStream提供基于流的IO操作.以字节为处理单位:Reade ...

  7. xpages的comboBox能够手动输入

    在xpages使用的comboBox默认仅仅能选择.不能手动输入,怎么才干手动输入呢?经过查找资料和測试,最终能够了,请大家能够试试 假设试不行,能够再下载demo http://download.c ...

  8. SVM-SVM概述

    (一)SVM背景资料简介 支持向量机(Support Vector Machine)这是Cortes和Vapnik至1995首次提出,样本.非线性及高维模式识别中表现出很多特有的优势,并可以推广应用到 ...

  9. hdu2242(树形dp+tarjan+缩点)

    hdu2242 http://acm.hdu.edu.cn/showproblem.php?pid=2242 给定n,m表示n个点,m条边 每个点有个权值 问我们删除两某条边(割边)后将图分为两个部分 ...

  10. js中escape的用法----前端页面简单加密

    escape() 方法,它用于转义不能用明文正确发送的任何字符.比如,电话号码中的空格将被转换成字符 %20,从而能够在 URL 中传递这些字符. http://localhost:8080/a?na ...