jon*_*nzh 1 c++ qt class member-initialization
在许多文章和书籍中提出了许多C++编程最佳实践.以下是与C++类数据成员相关的子集:
考虑以下具有Qt类类型的数据成员的类:
class MyClass {
public:
myClass();
~myClass();
private:
int myInt;
QString myQString;
QList<QString> myQList;
QHash<int, QString> myQHash;
char * pChar;
};
Run Code Online (Sandbox Code Playgroud)
通过应用上述最佳实践,构造函数代码如下所示:
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.
{
}
Run Code Online (Sandbox Code Playgroud)
但是,我的印象是并非所有Qt类数据成员都需要初始化.但我不是百分百肯定的.一些开发人员认为,通过将所有数据成员放在初始化列表中,我们可以避免省略应该初始化的一些重要数据成员的初始化.但是,如果这是一个真正的问题,我宁愿为每个不需要初始化的数据成员添加注释行,例如:
MyClass::MyClass() :
myInt(0),
//myQString(),
//myQList(),
//myQHash(),
pChar(NULL)
{
}
Run Code Online (Sandbox Code Playgroud)
总而言之,我想知道何时应该初始化Qt类数据成员,何时不需要初始化,以及为什么.谢谢!
如果您没有类的默认构造函数,则必须在初始化程序列表中初始化它,并且不需要在初始化程序列表中调用默认构造函数.它不是Qt特定的,它是任何类的一般规则.如果你有一个默认构造函数(它接受0参数),即使你没有在初始化列表中调用它,它也会被自动调用.
更新:
Q1:MyClass :: MyClass()的2个版本是否相同?也就是说,他们会生成2个相同内容的对象吗?
是.
Q2:一个版本比另一个版本快吗?
您可以更快地键入第二个版本;-),没有性能差异.