cocos2dx实现引用计数
GameObject.h
#ifndef __GameObject_H__ #define __GameObject_H__ class GameObject { public: GameObject(); ~GameObject(); int _iCount; void myFree(); }; #endif
#include "GameObject.h" #include "cocos2d.h" USING_NS_CC; GameObject::GameObject() { _iCount = 1; } GameObject::~GameObject() { } void GameObject::myFree() { --_iCount; if (_iCount<=0) { delete this; } log("====shuchu _iCount = %d",_iCount); }
下面是c++和c语言的申请内存和释放内存的用法示例
cocos2dx实现引用计数 //C++:如果调用delete就一定会去调用析构函数 //如果调用new就一定会去调用构造函数 GameObject* gameObject = new GameObject(); gameObject->_iCount = 1; delete gameObject; //调用delete就会马上去执行析构函数 GameObject* gameObject2 = new GameObject[5]; delete[] gameObject2; //new/delete //new[]/delete[] //内存出错 GameObject* gameObject = new GameObject(); GameObject* gameObject2 = gameObject; //引用同一块内存地址 gameObject->_iCount = 6; delete gameObject; gameObject2->_iCount = 0; //C:malloc和free不执行构造函数和析构函数 GameObject* gameObject = (GameObject*)malloc(sizeof(GameObject)); gameObject->_iCount = 0; free(gameObject); //这是实现引用计数 GameObject* gameObject = new GameObject(); GameObject* gameObject2 = gameObject; gameObject->_iCount+=1; gameObject->myFree(); gameObject->_iCount = 6; gameObject2->_iCount = 5; gameObject2->myFree(); //autorelease是在析构的时候把所有的指针都赋为null,这样就不会 //导致内存泄露
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。