C++使用初始化列表委派构造函数.哪个初始化发生
C++ delegating constructor with initialization list. Which inits happen?
我看过一个非常相似的问题,但我不太确定我是否理解答案。如果我委托构造函数,初始化列表中的哪些初始化会发生?
例:
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
) 构造函数中的初始值设定项列表有什么意义?只是为了让编译器满意?
根据C++标准
如果 mem-initializer-id 指定构造函数的类,则它应该是 唯一的内存初始值设定项;构造函数是委托构造函数, 并且 mem 初始值设定项选择的构造函数是目标 构造 函数。主构造函数是第一个构造函数 在构造对象(即不是目标)时调用 该对象构造的构造函数)。目标构造函数是 通过重载分辨率选择。一旦目标构造函数返回, 执行委托构造函数的主体。如果构造函数 直接或间接地委托给自己,程序格式不正确; 无需诊断。
所以这个构造函数定义
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)
{
}
相关文章:
- 为什么std::vector和std::valarray初始化构造函数不同
- 初始化构造函数C++中结构的向量
- C++ 中常量属性的初始化构造函数错误
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- 如何通过参数初始化构造函数中的数组?
- 是否有理由使用 malloc 初始化构造函数中的指针
- 如何在 c++ 中初始化构造函数中的二维数组
- 为什么初始化构造函数列表参数时会发生异常?
- 无法初始化构造函数
- 初始化构造函数的默认参数的优选方法是什么?
- 在C++17中使用空列表初始化构造函数时发生编译错误
- C++ 初始化构造函数初始化列表中的嵌套结构?
- 初始化构造函数c++中的向量
- g++ (GCC) 4.6.0 我有以下类,我正在尝试初始化构造函数的结构成员初始化列表
- 使用字符串文本初始化构造函数中的 std::array<char,x> 成员。海湾合作委员会错误?
- 初始化构造函数C++中函数的成员指针
- 在c++中初始化构造函数中的静态成员变量时出错
- memset()初始化构造函数中的对象
- 初始化构造函数C++中的成员向量