[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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大疆网上测评题库_一份完整的大疆2018校招笔试题和面经送给大家~

    大疆网上测评题库_一份完整的大疆2018校招笔试题和面经送给大家~听说周日大疆就要笔试了,今年的秋招来的有点让人猝不及防啊,牛客的各种讨论群里都弥漫着一种恐惧的氛围,我是谁,我在哪,我该怎么办(惊恐脸)。。。。。哈哈哈没关系,作为一个刚刚踏上工作岗位的老学长,去年秋招在牛客网收获颇丰,是时候来回馈一波牛客网,回报一下牛妹了;)话不多说,干货奉上2018秋招大疆机器学习、算法笔试题1、两个小车,走一步能量消耗1,方向为1向右,-1为向左,首先输入路途长度,然后输…

    2022年6月29日
    95
  • Nginx 报错 504 Gateway Time-out 的解决方法

    Nginx 报错 504 Gateway Time-out 的解决方法

    2022年2月15日
    68
  • 字符串匹配(多模式匹配篇)「建议收藏」

    字符串匹配(多模式匹配篇)「建议收藏」字符串匹配(多模式匹配篇)摘要:问题的提出:众所周知,KMP算法在O(n)的时间中solve单模式串匹配问题。但怎样solve多模式串匹配问题呢?Solve:本文用简要记叙了使用trie树,trie图(AC自动机)solve该问题的方法。关键字:字符串,多模式串匹配,trie树,trie图,AC自动机。前言:KMP算法是一种极其优秀的单模式串匹配算法,它通过前缀函数fail来减少匹配次数,以达到O…

    2022年8月21日
    4
  • shell脚本之awk数组

    shell脚本之awk数组一.数组格式数组是一个包含一系列元素的表.格式如下:abc[1]=”xiaohong”abc[2]=”xiaolan”解释:abc:为数组名称[1]、[2]:为数组元素下标,可以理解为数组的第1个元素、数组的第2个元素xiaohong、xiaolan:元素值例子1:定义数组,并且打印数组元素[root@tab0~]#awk’BEGIN{a[0]=”xiaohong”;a[1]=”xiaolan”;printa[0]}’xiaohong[root@tab0~]#awk

    2022年7月19日
    19
  • 科研方法与学术论文写作_科技论文写作与发表教程第八版pdf

    科研方法与学术论文写作_科技论文写作与发表教程第八版pdf导读:本文推荐四个学术英语写作用到的网站/插件,让你的表达更地道,更多样,减少错误。它们分别是:AcademicPhrasebank,Linggle,collocaid,grammely。1.AcademicPhrasebank网址:http://www.phrasebank.manchester.ac.uk/这个网站提供论文各部分的模版,如介绍怎么写,总结怎么写,如何描述方法,报告细节等。比如现在需要在文章中举例,可以点击GivingExamples,点击页面显示的各项内容.

    2025年6月30日
    1
  • 《Java基础视频-深入浅出精华版视频》视频下载及视频介绍

    《Java基础视频-深入浅出精华版视频》视频下载及视频介绍

    2021年5月26日
    94

发表回复

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

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