gpt4 book ai didi

c++ - C++ 类的 Qt 类数据成员在使用前是否应该初始化?

转载 作者:行者123 更新时间:2023-11-30 00:47:03 25 4
gpt4 key购买 nike

许多文章和书籍中都提出了许多 C++ 编程最佳实践。以下是与 C++ 类数据成员相关的子集:

  1. 确保对象在使用前已初始化。
  2. 确保所有构造函数都初始化对象中的所有内容。
  3. 在每个构造函数的初始化列表中初始化数据成员通常比在其主体中更有效。
  4. 在初始化列表中,数据成员应按照声明的顺序列出。

考虑以下具有 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 类数据成员,什么时候不需要初始化,以及为什么。谢谢!

最佳答案

如果你没有一个类的默认构造函数,那么你必须在初始化列表中初始化它,并且不需要调用初始化列表中的默认构造函数。它不是特定于 Qt 的,它是任何类的通用规则。当你有一个默认构造函数(它接受 0 个参数)时,即使你没有在初始化列表中调用它,它也会被自动调用。

更新:

Q1: Are the 2 versions of MyClass::MyClass() above equivalent? That is, do they produce 2 objects of same content?

是的。

Q2: Is one version faster than the other?

您可以更快地输入第二个版本;-),没有性能差异。

关于c++ - C++ 类的 Qt 类数据成员在使用前是否应该初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35952976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com