【发布时间】:2014-02-19 16:27:47
【问题描述】:
我看过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) 构造函数中初始化列表的意义何在?只是为了让编译器满意?
【问题讨论】:
-
这是无效代码,正如其他答案和compiler shows 所述。
-
hrmmmm,当我只有委托时,我收到有关成员不在初始化列表中的错误。以及
error: MyClass is not a direct base of MyClass。也许这表明我们不使用 c++11,这可能是问题所在。 -
可能是你的编译器不支持委托构造函数。
标签: c++ class constructor definition delegating-constructor