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

struct MyFancyClass : theUberClass
{
    MyFancyClass();
    ~MyFancyClass();
    resultType initMyFancyClass(fancyArgument arg1, classyArgument arg2,
                                redundantArgument arg3=TODO);
    // several fancy methods...
};

他们告诉我,这与时间有关。构造后必须做的一些事情会在构造函数中失败。但是大多数构造函数是空的,我真的看不出没有使用构造函数的任何原因。

所以,我转向C++的向导,您好:为什么您要使用初始化方法而不是构造函数?

最佳答案

因为他们说“定时”,所以我想这是因为他们希望自己的init函数能够在对象上调用虚函数。这在构造函数中并不总是有效,因为在基类的构造函数中,对象的派生类部分“尚不存在”,尤其是您无法访问派生类中定义的虚函数。相反,将调用该函数的基类版本(如果已定义)。如果未定义(表示该函数是纯虚函数),则会得到未定义的行为。

初始化函数的另一个常见原因是希望避免出现异常,但这是一种非常古老的编程风格(并且它是否是一个好主意本身就是一个完整的论点)。它与构造函数中无法执行的操作无关,而与以下事实无关:构造函数在某些情况下无法返回错误值。因此,就您的同事给您的真正原因而言,我怀疑不是这样。

关于c++ - 为什么要使用初始化方法而不是构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3786853/

10-11 22:40
查看更多