通常构造函数应该是这样的:
//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 的功能。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)