我不知道Cocos2d-x中这两个宏之间的真正区别CC_SAFE_DELETE
和CC_SAFE_RELEASE_NULL
谁能向我解释?它可能可以解决我的游戏中出现的一些内存泄漏。
这是我要使用它的示例。
CoolLayer * CoolLayer::create()
{
CoolLayer * pRep = new CoolLayer();
if (pRep && pRep->init() )
{
pRep->autorelease();
}
else
{
CC_SAFE_DELETE(pRep);
}
return pRep;
}
提前致谢。
最佳答案
CC_SAFE_DELETE被定义为
do { delete (p); (p) = nullptr; } while(0)
基本上用于删除要删除的常规c++声明的对象。
CC_SAFE_RELEASE定义为
do { if(p) { (p)->release(); } } while(0)
(编辑刚刚意识到您的问题询问有关CC_SAFE_RELEASE_NULL的问题,除了它也使您的指针无效之外,它完全一样)
这将减少由cocos2d-x的引用计数构造使用的cocos2d-x对象的引用计数,如果某个对象的引用计数为0,它将为您取消分配。
对标准C++使用安全删除,例如 vector 或数组,或者您的自定义类可能是任何东西。对于从cocos2d::Object继承的任何内容,请使用安全释放,因为它内置了本机引用计数,从而使跟踪对象引用更加容易。
如果您不熟悉引用计数,则是因为cocos2d最初是在Objective-C中创建的,引用计数是规范,因此在移植之后,他们继续将其用于所有本机对象。
关于c++ - 在Cocos2d-x中,CC_SAFE_DELETE和CC_SAFE_RELEASE_NULL之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24565534/