我什么时候用cocos2d-x中的参数初始化自定义创建函数中的变量?
When do I init the variables in Custom create function with argument in cocos2d-x?
我已经创建了一个自定义图层,我想在这个图层中传递两个变量。我应该初始化Tlayer
和Hlayer
在构造函数或init()
函数?我查了一些资料,大多数都说我们应该避免使用构造函数。为什么?
TouchLayer* TouchLayer::create(TcharacterLayer* t,HcharacterLayer* h){
TouchLayer* pRet = new TouchLayer();
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}else
{
delete pRet;
pRet = NULL;
return NULL;
}
}
class TouchLayer : public CCLayerColor
{
public:
TouchLayer();
~TouchLayer();
virtual bool init();
virtual void onEnter();
virtual void onExit();
CREATE_FUNC(TouchLayer);
static TouchLayer* create(TcharacterLayer* t,HcharacterLayer* h);
TcharacterLayer* Tlayer;
HcharacterLayer* Hlayer;
};
我想你可以得到一些有关"为什么我们应该使用init()方法而不是构造函数"的相关信息:https://stackoverflow.com/a/20280664/3090526
- 如果你的类只有一个构造函数,你可以在构造函数中初始化你的类的成员。
-
但是如果你有多个构造函数,那么我认为你应该在
init()
函数中初始化你的类成员,因为如果不是,你必须在每个构造函数中初始化你的类成员,你可能会错过初始化一些成员。 -
如果你使用一个现代的编译器,你可以使用
Delegating constructors
而不需要编写init()
函数
委托构造函数- gcc 4.7
您应该在静态create
方法的TouchLayer* pRet = new TouchLayer();
行之后分配这些变量。例如:
pRet->Tlayer = t;
pRet->Hlayer = h;
相关文章:
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何创建一个对象创建函数,该函数将由与其关联的名称调用?
- 创建函数变体向量时"No matching function for call"错误
- C++ 在映射中创建函数指针向量
- 以编程方式在 C++ 中创建函数
- 如何创建函数可能使用自定义可比C++?
- 编译错误,未创建函数/方法! 对于 brms 模型
- Cython 创建 C 函数别名
- 创建函数指针数组
- 动态创建函数并获取指针
- 混合模板类型的模板参数包(std::使用可选参数重新创建函数)
- 如何创建函数原型命名空间
- 无法创建函数数组
- 在为STD模板函数创建函数对象时,还要还原样板
- 是否可以在C++中声明基类,以便只能通过创建函数创建从它派生的类
- 将原始指针移动到已创建函数中的下一个字符
- qjsonObject如何创建函数
- 尝试在别人的代码中C++创建函数(A* 搜索)
- 在C++中通过模板包重新创建函数签名和调用
- 创建函数时接收"expected unqualified-id"