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中将输入对象的指针和输出对象的指针都作为函数的输入。

浙公网安备 33010602011771号