我刚进入一家新公司,大部分代码库使用初始化方法而不是构造函数。
struct MyFancyClass : theUberClass
{
MyFancyClass();
~MyFancyClass();
resultType initMyFancyClass(fancyArgument arg1, classyArgument arg2,
redundantArgument arg3=TODO);
// several fancy methods...
};
他们告诉我,这与时间安排有关。有些事情必须 在 构造函数中失败的构造之后完成。但是大多数构造函数都是空的,我真的看不出有什么理由不使用构造函数。
所以我转向你,哦 C++ 的巫师:你为什么要使用 init 方法而不是构造函数?
原文由 bastibe 发布,翻译遵循 CC BY-SA 4.0 许可协议
既然他们说“计时”,我想这是因为他们希望他们的 init 函数能够调用对象上的虚函数。这并不总是在构造函数中起作用,因为在基类的构造函数中,对象的派生类部分“还不存在”,特别是您无法访问派生类中定义的虚函数。而是调用函数的基类版本(如果已定义)。如果它没有被定义,(暗示这个函数是纯虚拟的),你会得到未定义的行为。
使用 init 函数的另一个常见原因是希望避免异常,但这是一种相当老派的编程风格(而且它是否是一个好主意是它自己的一个完整的论点)。它与无法在构造函数中工作的事物无关,而是与构造函数在失败时无法返回错误值的事实有关。所以就你的同事给你的真实原因而言,我怀疑不是这样。