类实例成员初始化

时间:2011-11-08 10:20:53

标签: c++

如果一个类的实例成员本身就是一个类,那么构造函数是否必须在构造函数初始化列表中为它提供初始化?

在我的代码中的某些情况下,这导致了很长的初始化列表,这是做事的方式吗?我只是问,因为它看起来不够优雅,但如果它是如何完成那么那就没关系。

对于常量实例成员变量也是如此?

2 个答案:

答案 0 :(得分:2)

如果你有一个默认构造函数(没有参数) - 那么你不需要显式初始化它。

对于常量实例,默认初始化没有意义,是吗?所以根本没有它们是没有意义的,除非你有什么东西要初始化它们。 (但是,无论出于什么原因,这当然是可能的。)

答案 1 :(得分:1)

对于对象,您必须初始化所有没有默认构造函数的成员。 如果省略初始化列表中的成员,将使用其默认构造函数(或者对于基本类型,其值将是未定义的)。

对于原始类型intpointers),初始化它们是合法的,但它们的值将是未定义。< / p>

最后,您必须将引用初始化为其他对象(std::string&)。

有关详情,请参阅this answer

此外,我想指出,如果你的班级有很多成员,这可能表明你应该把它分成几个较小的班级。最佳做法是让课程只有一个责任(见single responsibility principle)。