我不知道Cocos2d-x中这两个宏之间的真正区别
CC_SAFE_DELETECC_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/

10-15 06:29