В CCCallFuncND мы передаем указатели. Рекомендуется ли передавать указатель локальной области видимости (т. Е. Указатели, объявленные и размещенные в элементе) из другого метода.
Метод похож на: —
CCCallFuncND * CCCallFuncND::create(CCObject* pSelectorTarget, SEL_CallFuncND selector, void* d)
{
CCCallFuncND* pRet = new CCCallFuncND();
if (pRet && pRet->initWithTarget(pSelectorTarget, selector, d))
{
pRet->autorelease();
return pRet;
}
CC_SAFE_DELETE(pRet);
return NULL;
}
Это не очень хорошая практика. Вы можете пройти, но вы не можете использовать его, если вы не запустили CCCallFuncND немедленно. если вы поместите его в CCSequence и запустите позже, void * будет указывать на некоторый неверный адрес.
Это безопасно до тех пор, пока вы не вернете указатели на локальные переменные (которые выйдут из области видимости после возврата из метода). С новой памятью для объекта выделяется куча (будьте осторожны с размещением новой) и, следовательно, можно безопасно вернуть ее из функции.
Factory Pattern делает то же самое.
http://www.oodesign.com/factory-pattern.html