许多文章和书籍中提出了许多 C++ 编程最佳实践。以下是与 C++ 类数据成员相关的子集:
- 确保在使用对象之前对其进行初始化。
- 确保所有构造函数都初始化对象中的所有内容。
- 在每个构造函数的初始化器列表中初始化数据成员通常比在其主体中更有效。
- 在初始化列表中,数据成员应该按照它们被声明的顺序列出。
考虑以下具有 Qt 类类型数据成员的类:
class MyClass {
public:
myClass();
~myClass();
private:
int myInt;
QString myQString;
QList<QString> myQList;
QHash<int, QString> myQHash;
char * pChar;
};
通过应用上述最佳实践,构造函数代码如下所示:
MyClass::MyClass() :
myInt(0), // OK, primitive should be initialized.
myQString(), // Is this really needed?
myQList(), // Is this really needed?
myQHash(), // Is this really needed?
pChar(NULL) // OK, pointer should be initialized.
{
}
但是,我的印象是并非所有的 Qt 类数据成员都需要初始化。但我不是 100% 确定这一点。一些开发人员认为,通过将所有数据成员都放在初始化列表中,我们可以避免忽略一些应该初始化的重要数据成员的初始化。但是,如果这是一个真正的问题,我宁愿为每个不需要初始化的数据成员添加注释行,例如:
MyClass::MyClass() :
myInt(0),
//myQString(),
//myQList(),
//myQHash(),
pChar(NULL)
{
}
总而言之,我想知道什么时候应该初始化 Qt 类数据成员,什么时候不需要初始化,以及为什么。谢谢!