[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()

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python生成exe文件的方法及步骤

    Python生成exe文件的方法及步骤为什么要生成可执行文件不需要安装对应的编程环境 可以将你的应用闭源 用户可以方便、快捷的直接使用打包工具pyinstaller安装pyinstaller如果你的网络稳定,通常直接使用下面的命令安装即可:pipinstallpyinstaller检查pyinstaller安装成功与否:只需要执行如下命令其中一个即可:pyinstaller-vpyi…

  • Android中Broadcast Receiver组件具体解释

    Android中Broadcast Receiver组件具体解释

    2021年12月15日
  • 最好用的mysql 管理工具_汽车行业质量管理五大工具

    最好用的mysql 管理工具_汽车行业质量管理五大工具对于数据库运维人员来说,想要保证数据库在高效平稳的运行就有点像杂技演员在转盘子,需要灵活、专注、能快速做出反应、并且拥有冷静的头脑。数据库几乎是所有能够成功运行系统的核心。而数据库运维人员对组织的数据… 对于数据库运维人员来说,想要保证数据库在高效平稳的运行就有点像杂技演员在转盘子,需要灵活、专注、能快速做出反应、并且拥有冷静的头脑。数据库几乎是所有能够成功运行系统的核心。而数据库运维人员对组织的数据负责,能找到可依靠的工具来更加高效的管理数据库,并且轻松的维护日常的工作就变得格外重要。数据库运维人

  • 复试–矩阵行列对角和

    复试–矩阵行列对角和

  • 局域网vlan配置步骤_局域网vlan划分案例

    局域网vlan配置步骤_局域网vlan划分案例计算机网络技术的发展犹如戏剧舞台,你方唱罢我登台。从传统的以太网(10Mb/s)发展到快速以太网(100Mb/s)和千兆以太网(1000Mb/s)也不过几年的时间,其迅猛的势头实在令人吃惊。而现在中大型规模网络建设中,以千兆三层交换机为核心的所谓“千兆主干跑、百兆到桌面”的主流网络模型已不胜枚举。现在,网络业界对“三层交换”和VLAN这两词已经不感到陌生了。一、什么是三…

  • initializecomponent()什么意思(丹参的功效与作用)

    初始你的控件的初始值用的,一般说来你拖放一个控件到Vs.net里,并设置相应的控件属性值,这些都由Vs.net自动放在InitializeComponent()这个函数里,明白了吧InitializeComponent从字面上理解就是初始化组件的意思:)

发表回复

您的电子邮箱地址不会被公开。

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