别怕Linux编程

Google C++编程规范 – 第三十条 -《类成员变量的初始化》

本原创文章属于《Linux大棚》博客。

博客地址为http://roclinux.cn

文章作者为roc wu

==

【规范】

如果类中设置了成员变量,那么你就必须对每一个成员变量都配备类内初始化,或者在构造函数中进行初始化。如果你没有这样做,那么编译器会为这些成员变量指定默认值,但这个默认值可能并不和你心意,因为它可能会使结构体的某些域未被初始化,或者初始化成一个你不满意的值。

【一些说明】

当new一个新的类对象时,如果不传入任何参数,则会调用默认的构造函数。

“类内成员初始化”,是指类内部形如int count_ = 17或string name_{“abc”}的成员变量声明,如果不做初始化,则是这样:int count_或string name_。

【支持初始化的声音】

因为这总能确保类对象处于一个可用的状态,而且在需要进行调试的情况下,可以设置成员变量为一个明显错误的值。

类内成员初始化可以确保成员变量总会被初始化,而不必重复的在构造函数中再写一遍,这有利于减少bug,例如在一个构造函数中初始化了,却忘记在另一个构造函数中初始化。

【反对初始化的声音】

类内成员初始化,在某些情况下可能会导致混乱,比如一个成员变量既进行了类内初始化,又在构造函数中进行了赋值,这样的话,构造函数中的赋值会覆盖类内初始化的值。

【结论】

当一个类的成员变量需要以相同的方式在不同的构造函数中初始化的话,那么请使用类内成员初始化。

如果你针对类中的某个成员变量没有使用类内成员初始化,且这个类也没有其他构造函数,那么你就须要定义默认构造函数,以确保类对象处于一个可用的状态。这样规定的原因在于,如果你既没有进行类内成员初始化,也没有定义默认构造函数,那么编译器会为这个类成员变量设置一个默认的值,但这个值可能并非合理的值,或许会导致一些错误发生。

另外,当你的类继承自另一个已存在的类,而且你也没有增加新的类成员变量时,是不需要定义默认构造函数的。

谢谢!

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *