这是一个好习惯,还是仅仅取决于?
感谢。
答案 0 :(得分:2)
如果你要在性能关键代码中默认构造大量POD对象,然后用有效数据填充它们,那么唯一一次不进行初始化可能是有意义的 - 例如如果要创建一个包含一百万个对象的数组,然后使用有效数据填充数组的对象。在那种情况下,您可能希望避免初始化,因为当您只是在之后再次覆盖它时,浪费CPU周期来将所有内容归零。
但是,如果你这样做,请务必在你班级的.h文件中加上 / *很多眼睛的评论* / 警告用户你正在做什么和为什么,并记录下来在您维护的任何其他程序员的文档中彻底。追踪未初始化的错误并不是很有趣......
答案 1 :(得分:1)
经验法则是一个对象永远不应该存在于未初始化状态。实现此目的的唯一方法是在构造期间初始化所有成员变量。处于未初始化状态的对象与无效状态之间存在差异。当成员变量在构造期间未初始化对象时,会发生未初始化状态。由于变量可能包含未知值,因此依赖于它们的任何成员函数可能会间歇性地表现不同。无效状态会将变量初始化为默认值,从而提供一些期望,即构造后对象的行为始终相同。
答案 2 :(得分:0)
Andrew Koenig和Barbara Moo撰写的“C ++的反思”,第4章
每个ctor都需要初始化每个数据成员吗? 它并不总是正确的,有时你的数据成员在你的对象存在一段时间时就有意义,这实际上取决于它。
我所拥有的书不是原版英文版,所以我对它进行了翻译。如果您想了解更多信息,请阅读整个第4章:)
答案 3 :(得分:0)
永远不要说。
初始化每个数据成员是一个非常非常好的实践。但有时候,在非常特殊的情况下,如果要创建大量对象(可能需要比你想要的更多的CPU周期),你可能需要跳过一些初始化 - 你将在以后初始化它们,你可以保证在初始化之前不会使用任何数据成员。