1

次のようなクラス Engine があるとします。

class Engine
{
  public:
  private:
     Game * m_pGame;
}

そして、そのコンストラクターに初期化リストを使用したい:

// Forward declaration of the function that will return the
// game instance for this particular game. 
extern Game * getGame();

// Engine constructor
Engine::Engine():
  m_pGame(getGame())
{

}

そのイニシャライザはm_pGame賢明ですか?

つまり、関数を使用してコンストラクターでメンバー変数を初期化することは問題ありませんか?

4

1 に答える 1

8

初期化リストは、値がそこにどのように到達するかを気にしません。あなたが心配しなければならないのは、妥当な値が提供されていることを確認することです。getGame() が確実に有効なポインターを返す場合、これが問題になる理由はありません。

おそらくより良い質問は、最初に getGame を呼び出して、それを引数として渡してはどうかということです。例えば:

Engine::Engine(Game* game):
  m_pGame(game)
{
}

// later...
Engine* the_engine = new Engine(getGame());

これにより、将来のエンジンの構成方法がより柔軟になり、getGame 関数への依存関係がハードコーディングされなくなります。

于 2013-07-17T14:07:56.617 に答える