多くの記事や書籍で提案されている多くの 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 クラスのデータ メンバーを初期化する必要がある場合と、初期化が不要な場合とその理由を知りたいと思います。ありがとう!