现在,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. jquery下php与ajax的互传数据(json格式)自我总结

    研究了一整天的json数据与ajax的数据传输,现在进行一个小的自我总结,仅供参考 1.关于ajax的认识 $.ajax(),是jquery下包装好的一个函数:参考地址:http://www.w3sc ...

  2. 搜索树SVN的树的时候遇到的乱码问题

    public void listDirectoryNode(SVNRepository repository, String dirUrl, FileNode node) { String curre ...

  3. Oracle表空间详解

    Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...

  4. asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件

    原文:asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功.请重试. Login控件 现象1.asp.net使用自定义sql server身份验证数据库,在A机器新增用户A,可以登录成 ...

  5. zabbix 监控特定进程

    因为一些server上跑着一些重要程序,须要对它们进行监控,公司用的是zabbix监控,之前都是在zabbix中加入自己定义脚本对特定程序进行监控,近期看了zabbix的官方文档,发现原来强大的zab ...

  6. el表达式 分页提交 中文乱码

    el表达式 分页提交 中文乱码 网上找了很多资料,没能解决我的问题.并不是说网上的那些资料不好.而是不适用于我的问题吧. 看看的的问题: 原始页面 单击下一页 , 乱码. 引起的原因则是因为自己的js ...

  7. 报错compile_str() flow.php on line 375的解决方法

    flow.php line 375,flow.php  找到375行: * 保存收货人信息 */ $consignee = array( 'address_id' => empty($_POST ...

  8. python学习笔记之十:文件和素材

    这里将介绍函数和对象--文件和流,让你在程序调用期间存储数据,并且可以处理来自其他程序的数据. 一. 打开文件 1.1 open函数 open函数用来打开文件,语法如下:open(name,[.mod ...

  9. HiPAC高性能规则匹配算法之查找过程

    收到一封邮件,有位朋友认为我误解了nf-HiPAC.如此的一个高性能算法怎能被什么传统的hash,tree之类的胁迫.是啊.HiPAC是一个非常猛的算法.文档也比較少,这就更加添加了其神奇感,可是这决 ...

  10. Android定位功能(二)

    在前文Android定位功能(一)中,已经大致介绍了一下在Android平台中,和定位功能相关的类,并举例获取了位置信息.但是前文是基于Criteria定制了一个标准,通过getBestProvide ...