这是一个好的做法,还是取决于?
谢谢。
唯一不初始化可能有意义的情况是,如果您要在性能关键代码中默认构造大量 POD 对象,然后用有效数据填充它们——例如,如果您要创建一个一百万个对象,然后用有效数据填充数组的对象。在这种情况下,您可能希望避免初始化,因为当您之后只需要再次覆盖它时,将所有内容归零是浪费 CPU 周期。
但是如果你这样做了,一定要在你的类的 .h 文件中放/* LOTS OF EYE-GRABING COMMENTS */警告用户你在做什么以及为什么,并在你维护的任何其他程序员的文档中彻底记录它。追踪未初始化值的错误并不是很有趣......
经验法则是一个对象永远不应该以未初始化的状态存在。实现这一点的唯一方法是在构造过程中初始化所有成员变量。处于未初始化状态和无效状态的对象是有区别的。当成员变量在构造过程中未初始化对象时,会出现未初始化状态。由于变量可能包含未知值,任何依赖它们的成员函数可能会间歇性地表现不同。无效状态将变量初始化为默认值,提供一些期望对象在构造后始终表现相同。
在书中:Andrew Koenig 和 Barbara Moo 的“Ruminations on C++”,第 4 章
每个 ctor 都需要初始化每个数据成员吗?并非总是如此,有时您的数据成员在您的对象存在一段时间时才有意义,这真的取决于。
我的书不是英文原版,所以我翻译了一下。如果您想了解更多,请阅读整个第 4 章:)
永远不要说总是。
初始化每个数据成员是一个非常非常好的做法。但有时,在非常特殊的情况下,如果您要创建大量对象,您可能需要跳过一些初始化 - 这将花费比您想要的更多的 CPU 周期 - 您稍后会初始化它们,您可以保证在初始化之前不会使用任何数据成员。