如果一个类有一个实例成员本身就是一个类,那么构造函数是否总是必须在构造函数初始化器列表中为它提供一个初始化?
在某些情况下,在我的代码中,这会导致非常长的初始化器列表,这是做事情的方式吗?我问它只是因为它看起来不优雅,但如果它是如何做的,那就没问题。
常量实例成员变量也是这样吗?
发布于 2011-11-08 18:30:32
对于对象,您必须初始化所有没有默认构造函数的成员。如果在初始化列表中省略了一个成员,将使用它的默认构造函数(或者它的值对于基元类型是未定义的)。
对于原语类型 (int,pointers),不初始化它们是合法的,但它们的值将是未定义的。
最后,必须初始化对其他对象的引用 (std::string&)。
有关详细信息,请参阅this answer。
另外,我想指出的是,如果你的类有很多成员,这可能是你应该将它分成几个较小的类的迹象。最佳实践是让类只有一个职责(参见single responsibility principle)。
发布于 2011-11-08 18:23:20
如果你有一个默认的构造函数(没有参数),那么你不需要显式地初始化它。
对于常量实例,默认初始化是没有意义的,不是吗?因此,拥有它们是没有任何意义的,除非你有一些东西可以用来初始化它们。(但这当然是可能的,如果出于任何原因,这就是您正在做的事情)。
https://stackoverflow.com/questions/8048913
复制相似问题