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