c++ - 构造函数初始化列表 - 这行得通吗?

标签 c++ constructor initializer-list

在您的帮助下,我可以使用构造函数初始化列表解决我在这个最小示例 ( use parameterized constructor in other classes constructor) 中描述的问题。

在我的现实生活中,事情要困难一些。我的构造函数现在看起来像这样:

ClassC::ClassC() : _objectB(_objectA.getInt()) {
  _objectA = ClassA();
}

这行得通吗?编译器不会返回任何错误。但是,_objectB 被初始化为 _objectA 的值,它在下面的行中被初始化。那么 _objectA.getInt() 将如何返回有效值?

如果它不起作用,我怎样才能让它起作用?

最佳答案

如果 _objectA 声明如下

class ClassC
{
    ClassA _objectA;
    ClassB _objectB;

    public:
    ClassC();
}

它会工作,因为 _objectA 已经初始化(使用默认构造函数),您只需稍后重新为其分配一个新类,这与 _objectB 无关初始化。


但是,正如@πìντα ῥεῖ 建议的那样,最好使用

ClassC::ClassC() : _objectA(), _objectB(_objectA.getInt()) {}

这将初始化 _objectA,然后将其用于 _objectB 初始化。

关于c++ - 构造函数初始化列表 - 这行得通吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40665920/

相关文章:

java - 将值从构造函数传递到类中的私有(private)整数

c# - EF Code First 方法中 DbContext 类的空构造函数的目的是什么?

c - C中初始化列表中的这个语法是什么意思?

c++ - 错误的值正在使用 C++ 从 CSV 文件数据写入数组

c++ - 稍后更新其中一个变量时,计算结果不会改变

c++ - 检索 QProcess 的环境变量

java - 为什么我不能在 Java 构造函数中声明静态变量?

c++ - 遍历std::initializer_list

c++ - 为什么我的模板不接受初始化列表

c++ - Lib 和 DLL 链接到 exe 错误 "cannot read at 0x300"