В Cocos2d-x, в чем разница между CC_SAFE_DELETE и CC_SAFE_RELEASE_NULL?

Я не знаю реальной разницы между этими двумя макросами в 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;
}

Заранее спасибо.

1

Решение

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 ++, таких как векторы или массивы, или любых других пользовательских классов. Используйте безопасный выпуск для всего, что унаследовано от cocos2d :: Object, поскольку он имеет встроенный подсчет ссылок, что немного облегчает отслеживание ссылок на ваши объекты.

Если вы не знакомы с подсчетом ссылок, это происходит из-за того, что cocos2d изначально был создан в target-c, где подсчет ссылок является нормой, поэтому после порта они продолжали использовать его для всех своих собственных объектов.

2

Другие решения


По вопросам рекламы [email protected]