gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:58:43 27 4
gpt4 key购买 nike

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

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

他们告诉我,这与时间安排有关。有些事情必须在构造函数中失败的 构造之后完成。但是大多数构造函数都是空的,我真的看不出有什么理由不使用构造函数。

所以我求助于你,哦 C++ 的巫师:你为什么要使用 init 方法而不是构造函数?

最佳答案

既然他们说“定时”,我想这是因为他们希望他们的 init 函数能够调用对象上的虚函数。这在构造函数中并不总是有效,因为在基类的构造函数中,对象的派生类部分“还不存在”,特别是您无法访问派生类中定义的虚函数。而是调用函数的基类版本(如果已定义)。如果它没有被定义,(暗示这个函数是纯虚函数),你会得到未定义的行为。

使用 init 函数的另一个常见原因是希望避免异常,但这是一种相当老派的编程风格(而且它是否是一个好主意是它自己的一个完整的论点)。它与无法在构造函数中工作的事情无关,而是与构造函数在失败时无法返回错误值的事实有关。所以就你的同事给你的真实原因而言,我怀疑不是这样。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com