gpt4 book ai didi

具有多个构造函数的 C++ init 成员变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:27 25 4
gpt4 key购买 nike

通常一个构造函数应该是这样的:

//ctor1
SmallSim::SmallSim()
:mSimInit(false)
,mServersCreated(false)
,mTotalCPUTime(0)
{
...
}

如果我有多个构造函数会怎样?

在我看来,如果我从第二个构造函数调用第一个构造函数,第一个中的成员变量不会被初始化。

//ctor2
SmallSim::SmallSim(bool ImmediateExecution, bool Report)
{
SmallSim();

...
}

所以我需要重复 :mSimInit(假) ,mServersCreated(假) ,mTotalCPUTime(0)在我拥有的每个构造函数上?

据我所知,使用 InitClassVars() 并不是最好的方法...

//ctor1
SmallSim::SmallSim()
{
InitClassVars();

...
}

//ctor2
SmallSim::SmallSim(bool ImmediateExecution, bool Report)
{
InitClassVars();

...
}

//Common function for init of member vars for multiple constructors
void SmallSim::InitClassVars(void)
{
mSimInit = false;
mServersCreated = false;
mTotalCPUTime = 0;
}

是否有正确的方法来初始化成员变量而不在每个构造函数上重复初始化?

最佳答案

如果你这样做:

SmallSim::SmallSim(bool ImmediateExecution, bool Report)
{
SmallSim(); // 1

...
}

标有 1 的行创建了一个新的 SmallSim 临时对象,该对象很容易销毁,因为它未被使用。它对当前正在初始化的对象没有任何影响。要在同一个对象上调用另一个构造函数,你可以这样做:

SmallSim::SmallSim(bool ImmediateExecution, bool Report)
: SmallSim() {
...
}

(这是 C++11 的特性。)

关于具有多个构造函数的 C++ init 成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10417314/

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