cocos2d-x内存管理机制------沈大海

c++内存机制,采用new关键字实例化的对象,必须在不使用的时候手动delete掉,否则new的时候开辟的内存就不能被回收,造成内存泄露

Npc * n1=new Npc();

if(exit=0)

{ delete n1;

}

cocos2d-x 内存管理的方式,cocos2d-x采用引用计数的方式进行内存管理,当一个对象的引用计数为0的时候,就会被引擎自动delete掉

在cocos2d-x中绝大多数类继承CCObject

 CCObject::CCObject(void)
{
    static unsigned int uObjectCount = 0;

    m_uID = ++uObjectCount;  //  对象id

    m_nLuaID = 0;

   m_uReference = 1;             //引用计数
    m_bManaged = false;       //是否自动autorelease
}

void CCObject::release(void)  //减少引用
{
    CCAssert(m_uReference > 0, "reference count should greater than 0");
    --m_uReference;

    if (m_uReference == 0)
    {
        delete this;
    }
}

void CCObject::retain(void) //增加引用
{
    CCAssert(m_uReference > 0, "reference count should greater than 0");

    ++m_uReference;
}

//自动处理

CCObject* CCObject::autorelease(void)
{
    CCPoolManager::sharedPoolManager()->addObject(this);

    m_bManaged = true;
    return this;
}

CCObject::~CCObject(void)
{
    if (m_bManaged)
    {
        CCPoolManager::sharedPoolManager()->removeObject(this);
    }

}

自动释放池的释放是在哪里呢?大家可以研究下源码

在调试过程中可以跟踪对象的

    m_uReference = 1;             //引用计数
    m_bManaged = false;       //是否自动autorelease

这2个值来检查内存使用。

法则: 只要retain的放对应相同的release

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值