【发布时间】:2013-11-29 15:55:03
【问题描述】:
我习惯于使用 Objective-C 和 Cocos2d,所以这让我感到困惑。
我确实想将一些自定义对象保存到二维数组中,所以我正在这样做,在我想要数组的类的标题中:
public:
SomeClass *matrix[6][6];
在我做的 init 方法中的 .cpp 中:
this->matrix[0][0] = SomeClass::create();
如果我这样做,构造函数、init 和析构函数将按此顺序调用......显然,让我感到困惑的是析构函数调用。
如果我这样做:
this->matrix[0][0] = new SomeClass;
SomeClass 是 CCNode 的子类。
构造函数被调用,这很好......但是由于我确实想将init方法与create一起使用,我应该怎么做?我不知道为什么创建方法会在方法返回时立即调用析构函数。
我真的不明白 init 方法和 Create_func 到底发生了什么,因为我是 Cocos2d-x 的新手,所以我想更好地理解这一点。
这是我正在使用的创建函数:
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
__TYPE__ *pRet = new __TYPE__(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}
【问题讨论】:
-
请显示
SomeClass::create()函数。 -
我正在使用在基本 Cocos2d-x 项目中找到的已定义 CREATE_FUNC() 宏,它在 CCPlatformMacros.h 中,我在问题中添加了 func
-
SomeClass::init()返回什么? -
这可能是因为 cocos2d-x 模拟了 objc 的保留/释放/自动释放行为。您必须“保留”创建的对象。
-
cocos2d-x中init方法返回一个bool,cocos2d中返回一个id。顺便说一句,我的 init 是“空的”。但是,您能给我一些关于如何“保留”创建的对象的建议吗?我相信你是对的,因为实际上使用 new Object 它可以工作,所以它被保留了,但是如果我使用 create_func 我以后如何手动保留该对象?
标签: c++ cocos2d-x destructor init