これは良い習慣ですか、それとも単に依存しますか?
ありがとう。
初期化しないことが理にかなっているのは、パフォーマンスが重要なコードで多数のPODオブジェクトをデフォルトで構築し、後で有効なデータを入力する場合だけです。たとえば、 100万個のオブジェクトを作成し、配列のオブジェクトに有効なデータを入力します。そのシナリオでは、初期化を避けたいと思うかもしれません。後で再度上書きするだけの場合、すべてをゼロにするのはCPUサイクルの無駄だからです。
ただし、そうする場合は、クラスの.hファイルに/*たくさんの目を引くコメント*/を入れて、ユーザーに何をしているのか、その理由を警告し、他のプログラマーのドキュメントに完全に文書化してください。初期化されていない値のバグを追跡するのはそれほど楽しいことではありません...
経験則では、オブジェクトは初期化されていない状態で存在してはなりません。これを実現する唯一の方法は、構築中にすべてのメンバー変数を初期化することです。初期化されていない状態のオブジェクトと無効な状態のオブジェクトには違いがあります。初期化されていない状態は、構築中にメンバー変数がオブジェクトとして初期化されていない場合に発生します。変数には不明な値が含まれている可能性があるため、変数に依存するメンバー関数は断続的に異なる動作をする可能性があります。無効な状態は、変数をデフォルト値に初期化し、オブジェクトが構築後に常に同じように動作することを期待します。
本の中で:AndrewKoenigとBarbaraMooによる「RuminationsonC ++」、第4章
すべてのctorはすべてのデータメンバーを初期化する必要がありますか?これは常に正しいとは限りません。オブジェクトがしばらく存在する場合、データメンバーがその意味を持つ場合がありますが、それは実際に異なります。
私が持っている本は元の英語版ではないので、ちょっと翻訳しました。詳細を知りたい場合は、第4章全体をお読みください:)
常に言うことはありません。
すべてのデータメンバーを初期化することは、非常に優れた方法です。ただし、非常に特殊な状況では、大量のオブジェクトを作成する場合(必要以上にCPUサイクルがかかる)、初期化をスキップする必要があります。後でそれらを初期化すると、それを保証できます。初期化される前にデータメンバーが使用されることはありません。