tur*_*too 3 c++ constructor class definition delegating-constructor
我看过一个非常相似的问题,但我不太确定我理解答案。如果我委托构造函数,会发生初始化列表中的哪些初始化?
例子:
MyClass::MyClass(int a, int b)
:
MyClass(a, b, NULL),
int1(a),
int2(b),
pOtherClass(NULL)
{
}
MyClass::MyClass(int a, int b, Other *p)
:
int1(a),
int2(b),
pOtherClass(p)
{
if (pOtherClass == NULL)
{
pOtherClass = &DefaultInstance;
}
}
Run Code Online (Sandbox Code Playgroud)
由于编译器设置,我必须拥有两个类的完整初始值设定项列表。但我不想要的是:
int, int) 调用第二个构造函数( int, int, Other *)pOtherClasspOtherClass给NULL.我在顶部链接的问题似乎表明这种行为不会发生,但是 ( ) 构造函数中的初始化列表有什么意义呢int, int?只是为了让编译器高兴吗?
根据C++标准
\n\n\n\n\n如果 mem-initializer-id 指定构造函数\xe2\x80\x99s 类,则它应是唯一的 mem-initializer;构造函数是委托构造函数,由 mem-initializer 选择的构造函数是目标构造函数。主构造函数是在对象构造过程中调用的第一个构造函数(即,不是该对象构造的目标构造函数)。目标构造函数由重载决策选择。一旦目标构造函数返回,\n 就会执行委托构造函数的主体。如果构造函数直接或间接委托给自身,则程序格式错误;不需要任何诊断。
\n
所以这个构造函数定义
\n\nMyClass::MyClass(int a, int b)\n:\nMyClass(a, b, NULL),\nint1(a),\nint2(b),\npOtherClass(NULL)\n{\n}\nRun Code Online (Sandbox Code Playgroud)\n\n是无效的。
\n\n必须是
\n\nMyClass::MyClass(int a, int b)\n:\nMyClass(a, b, NULL)\n{\n}\nRun Code Online (Sandbox Code Playgroud)\n