[cocos2dx注意事项014]一个用于cocos2dx对象智能指针模板

[cocos2dx注意事项014]一个用于cocos2dx对象智能指针模板

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

现在,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()

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117035.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月11日 下午7:00
下一篇 2022年1月11日 下午7:00


相关推荐

  • 全面介绍Android Studio中Git 的使用(一)

    全面介绍Android Studio中Git 的使用(一)一、Git与GitHub这里首先介绍下Git与GitHub是什么东西,他们之间有何区别呢?Git:分布式版本控制系统,最初用在Linux上,可以和SVN、CVS等作为同一个概念理解,目前世界上最先进的分布式版本控制系统(没有之一)。GitHub:基于Git的项目托管平台,简单的说就是一个网站,通过注册账号后,可以使用Git服务,它提供了可以在上面创建资源仓库的Web页面,通过shell命令或者图形用户界面可以和远程项目同步更新,对项目进行管理。还是不太清楚?就是一个项目由多个人一起干,开发中对于

    2022年7月15日
    19
  • Spring Boot—(11)SpringBoot使用Junit单元测试

    Spring Boot—(11)SpringBoot使用Junit单元测试欢迎关注公众号:java4all摘要:本文详细的记录了SpringBoot如何结合Junit写测试用例,如何执行,打包执行,忽略执行等操作,SpringBoot内置了Junit测试组件,使用很方便,不用再单独引入其他测试组件。演示环境:SpringBoot+mybatis开发工具:IntelliJIDEA1.pom.xml一般使用idea新建一个Sp…

    2022年6月9日
    42
  • pb数据库连接_jdbc连接mysql中文乱码

    pb数据库连接_jdbc连接mysql中文乱码最近需要用pb联mysql做个项目,查网上有关的方法,很多都没说清楚,所以在这里总结下:  采用JDBC连接,首先去MYSQL官网下载mysql-connector-java-5.0.7.rar JDBC驱动打开PB,菜单Tools–>systemoptions,打开JAVA选项,点击新增文件(白色文件图标)选择刚解压的mysql-connector-java

    2025年10月10日
    6
  • PAT考试总结(考试心得)

    pat试题总结遍历问题的总结dfs中,如果是有环的图,要设置visited数组防止绕圈,同时在dfs函数退出前要将visited数组相应设置为false,否则其他路径就不能遍历该结点;在问题中,如果要求“从一个序列中选取若干个元素来满足条件”,可以考虑dfs,如1103IntegerFactorization(30分)和7-1Forever(20分);字符串处理总结字符串处理中,注意利用sscanf,可以按照格式读取字符串中的数字,如sscanf(s,“Therootis

    2022年4月15日
    55
  • ALSA 音频工具 amixer、aplay、arecord

    ALSA 音频工具 amixer、aplay、arecordALSA 简介 ALSA 是 AdvancedLinu 高级 Linux 声音架构的简称 它在 Linux 操作系统上提供了音频和 MIDI MusicalInstr 音乐设备数字化接口 的支持 在 2 6 系列内核中 ALSA 已经成为默认的声音子系统 用来替换 2 4 系列内核中的 OSS OpenSound

    2026年3月19日
    2
  • 用iptable防止ddos「建议收藏」

    用iptable防止ddos「建议收藏」DDoSdeflate是一款Linux/centos减轻/防止ddos攻击的一个小程序,相当于软件防火墙。注意,此程序仅仅能抵御较低流量的攻击,大流量攻击连用了上百台高档服务器做了负载均衡的新浪都扛不住,何况一个小小的普通服务器或vps。对此程序不要期望过高。这里仅仅介绍一下,对于一些简单的软件攻击可能还有点作用。CTOHOM制作的DDoSdeflate一键安装脚本:wge…

    2022年5月27日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号