相关疑难解决方法(0)

为什么使用初始化方法而不是构造函数?

我刚进入一家新公司,大部分代码库都使用初始化方法而不是构造函数.

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方法而不是构造函数?

c++ constructor initialization

47
推荐指数
6
解决办法
4万
查看次数

我应该使用虚拟'Initialize()'函数来初始化我的类的对象吗?

我正在和我的老师讨论关于课堂设计的问题,我们谈到了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()功能的论点到底是什么?它是否取决于应该使用的环境?如果是,请为图书馆/引擎开发人员提供推理,如果可以的话,请为游戏开发人员提供一般推理.


编辑:我应该提到,这些类将仅用作其他类中的成员变量,因为其他任何东西对它们都没有意义.抱歉.

c++ initialization

16
推荐指数
4
解决办法
3934
查看次数

标签 统计

c++ ×2

initialization ×2

constructor ×1