关于cocos2d-x内存管理autoRelease 原创
我们在使用cocos2dx游戏引擎的时候,发现他的内存管理和C++不相同,其实cocos2dx是在C++基础上封装了一层而已,底层还是用的C++的内存分配和释放。以下用一个简单的程序描叙cocos2dx内存管理原理。
#include
#include
using namespace std;
//初始化资源和数据
//更新游戏
//绘制游戏
class CObj;
vector
class CObj
{
public:
char name[16];
int refCount;
CObj()
{
refCount = 1;
cout<<"一个对象被产生了"<<endl;
cout<<"一个对象被加入到内存自动释放数组中"<<endl;
g_managerObj.push_back(this);
}
~CObj()
{
cout<<"一个对象被消失了"<<endl;
}
void retain()//说明有人在使用该对象,所以增加一次引用计数
{
refCount++;
}
void release()//说明有人要释放该对象,不再引用该对象
{
refCount--;
if (refCount==0)
{
delete this;
}
}
};
int main(int argc, const char * argv[])
{
CObj * pObj = 0;
pObj = new CObj;//在该对象的构造函数中我们把该对象加入到了对象自动释放数组中
pObj->retain();//相当于告诉电脑,有人在使用该对象,不要释放掉我们的对象
while (true)//游戏的主循环
{
for (vector
{
//检测到容器内有元素,直接调用元素的release来释放元素,只有那么调用过retain函数的元素才不会被真的释放
if ((*it)->refCount > 1)
{
printf("容器内有元素,但引用计数器大于1,内存不会被释放,对象将会从容器中删除\\n");
}
else
{
printf("容器内有元素将会被释放内存,因为引用计数等于1\\n");
}
(*it)->release();//删除掉没有被指定要用的对象
it = g_managerObj.erase(it);//把对象从自动内存释放数组中删除掉
}
}
//pObj->release();//释放掉对象的内存给系统
return 0;
}
有时候研究游戏引擎源代码对提高程序水平有很大的帮助。
欢迎关注游戏开发者微信公众号
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。https://m.blog.kokojia.com/game/b-63.html
- 上一篇: 关于纹理混合实现魔兽地形贴图