前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[cocos2dx注意事项014]一个用于cocos2dx对象智能指针模板

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

作者头像
全栈程序员站长
发布2022-07-06 13:58:15
1690
发布2022-07-06 13:58:15
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

现在,C++有许多实现智能指针,一个更无所谓。哈。 这种智能指针是专为cocos2dx 2.2.x自定义。主要的易用性,同时必须遵循现有的cocos2dx内存管理。特殊实现这样的智能指针。无需在使用时考虑retain要么release操作。须要new或delete操作!

以下是实现代码

代码语言:javascript
复制
//在非常多时候,类的成员是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

样例:

代码语言:javascript
复制
//类的数据成员定义:
XCocosPtr<CCSprite> m_Sprite;
//在init中
m_Sprite = CCSprite::create("");
//要么
m_Sprite.create()

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档