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,这样就不会 //导致内存泄露