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

Initialiser 列表不关心这些值是如何到达那里的。您必须担心的是确保提供合理的值。如果 getGame() 确定返回一个有效指针,那么这没有理由成为问题。

也许一个更好的问题是,为什么不先调用 getGame 并将其作为参数传递呢?例如:

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

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

这使您在未来如何配置引擎方面具有更大的灵活性,并且不会对 getGame 函数的依赖关系进行硬编码。

于 2013-07-17T14:07:56.617 回答