cocos2d-x内存管理

2014/11/9


CCObject* factoryMethod(){
    CCobject* ret=neew CCObject();
    //这里对ret指向的对象做必要的初始化操作
    return ret;
}

上面的代码有一个潜在的问题:
工厂方法对ret指向的对象的引用在函数返回时已经结束,但函数没有释放ret指向的对象,埋下了内存泄露的隐患。(例如只执行factoryMethod(),没有接收返回对象的指针)。
但是如果在函数返回前就执行release(),这显然是不合适的,这样再返回的指针就是一个错误的指针。

解决方法是:

CCObject* factoryMethod(){
    CCobject* ret=neew CCObject();
    //这里对ret指向的对象做必要的初始化操作
    ret->autorelease();//将对象放入自动回收池
    return ret;
}

cocos2d-x引擎中所有类都派生自CCObject类;
CCObject类的成员函数autorelease()的作用是将对象放入自动回收池。当自动回收池释放的时候,它会对池中所有的对象执行一次release()。

但是还是没讲清楚,因为每一帧结束都会自动释放自动回收池,释放回收池是讲引用为0的对象释放掉还是全部都release()(CCObject成员函数,引用减一)

Cocos2d-x使用计数引用机制。

还有一种办法是:
借鉴opencv里面的写法,将接收返回对象的指针作为函数的参数,不返回生成的对象,返回void或者bool,这样也可以避免上诉的问题。
opencv中将输入对象的指针和输出对象的指针都作为函数的输入。

posted @ 2018-10-12 20:13  clq.lib  阅读(110)  评论(0)    收藏  举报