我看过a very similar question,但我不太清楚我理解答案。如果我委托一个构造函数,那么初始化列表中的初始化是什么?
示例:
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;
}
}
由于编译器设置,我必须在这两个类中都有完整的初始化列表。但我不想要的是:
int, int
)调用第二个构造函数(int, int, Other *
)pOtherClass
pOtherClass
分配给NULL
。我在顶部链接的问题似乎表明此行为不会,但那么(int, int
)构造函数中初始化列表的重点是什么?只是为了让编译器满意吗?
答案 0 :(得分:3)
根据C ++标准
如果mem-initializer-id指定构造函数的类,应该是 唯一的mem-initializer; 构造函数是委托构造函数, 并且mem-initializer选择的构造函数是目标 构造函数。主构造函数是第一个构造函数 在构造对象时调用(即不是目标 该对象构造的构造函数)。目标构造函数是 由重载决议选择。一旦目标构造函数返回, 委托构造函数的主体被执行。如果是构造函数 直接或间接地代表自己,该计划是不正确的; 无需诊断。
所以这个构造函数定义
MyClass::MyClass(int a, int b)
:
MyClass(a, b, NULL),
int1(a),
int2(b),
pOtherClass(NULL)
{
}
无效。
必须
MyClass::MyClass(int a, int b)
:
MyClass(a, b, NULL)
{
}