我刚进入一家新公司,大部分代码库都使用初始化方法而不是构造函数.
struct MyFancyClass : theUberClass
{
MyFancyClass();
~MyFancyClass();
resultType initMyFancyClass(fancyArgument arg1, classyArgument arg2,
redundantArgument arg3=TODO);
// several fancy methods...
};
Run Code Online (Sandbox Code Playgroud)
他们告诉我这与时间有关.在构造之后必须完成一些事情,这些事情在构造函数中会失败.但是大多数构造函数都是空的,我没有看到任何不使用构造函数的原因.
所以我转向你,哦,C++的向导:为什么你会使用init方法而不是构造函数?
我正在和我的老师讨论关于课堂设计的问题,我们谈到了Initialize()
他大力宣传的职能.例:
class Foo{
public:
Foo()
{ // acquire light-weight resources only / default initialize
}
virtual void Initialize()
{ // do allocation, acquire heavy-weight resources, load data from disk
}
// optionally provide a Destroy() function
// virtual void Destroy(){ /*...*/ }
};
Run Code Online (Sandbox Code Playgroud)
当然,一切都有可选参数.
现在,他还强调了类层次结构中的可扩展性和使用(他是一个游戏开发者,他的公司出售游戏引擎),并带有以下参数(逐字逐句,仅翻译):
反对构造函数的论据:
Initialize()
功能参数:
我一直被教导直接在构造函数中进行实际初始化,并且不提供这样的Initialize()
函数.也就是说,我肯定没有他在部署库/引擎时那么多的经验,所以我想我会问好吧.
那么,支持和反对这些Initialize()
功能的论点到底是什么?它是否取决于应该使用的环境?如果是,请为图书馆/引擎开发人员提供推理,如果可以的话,请为游戏开发人员提供一般推理.
编辑:我应该提到,这些类将仅用作其他类中的成员变量,因为其他任何东西对它们都没有意义.抱歉.