大量使用静态成员变量是一种好习惯吗? [复制]

Posted

技术标签:

【中文标题】大量使用静态成员变量是一种好习惯吗? [复制]【英文标题】:Is it good practice to have heavy use of static member variables? [duplicate] 【发布时间】:2016-08-18 19:02:44 【问题描述】:

作为没有受过任何正规编程培训的人,我想知道我的 C++ 编码方法是否被认为是好的做法。具体来说,我说的是使用成员都是静态的类。这是我经常使用的一个模型,当我确定该类只会被实例化一次,并且我希望能够从我的代码中的任何地方访问该类时。但是,它看起来有点奇怪,因为周围有大量的 static 关键字,而且我必须在类定义之外显式初始化这些变量。

例如,如果我正在编写一个游戏,可能有几个类我只实例化一次并希望从任何地方访问。这些类可以是Graphics,代表要渲染的颜色和形状,World,代表我的角色生活的世界,User,代表游戏的当前人类玩家,Score,表示当前分数等。我通常会将它们创建为“静态”类,因为这样我就可以从代码中的任何位置访问它们。如果它们是“非静态”类,那么我将不得不不断传递指向这些对象的指针。

因此,对于一场足球比赛,我的代码可能如下所示:

// world.h

class World

public:
  static float pitch_colour;
  static float pitch_size;
  static float player_colour;
  static float player_size;
  static int num_players;
  static std::vector<Player> players;

  static void UpdatePositions();
;



// world.cpp

float World::pitch_colour = 0.9;
float World::pitch_size = 100;
float World::player_colour = 0.3;
float World::player_size = 5;
int World::num_players = 10;
std::vector<Player> World::players = std::vector<Player>(World::num_players);

void World::UpdatePositions()

    for (int i = 0; i < num_players; i++)
    
        players[i].UpdatePosition();
    




// main.cpp

int main()

    while (true)
    
        World::UpdatePositions();
        Graphics::DrawPitch(World::pitch_size, World::pitch_colour);
        for (int i = 0; i < World::num_players; i++)
        
            Graphics::DrawPlayer(&World::players[i], World::player_size, World::player_colour);
        
     
 

这种代码运行良好,但我只是想知道使用大量像这样的静态类是否是一种典型的方法,或者是否有更强烈推荐的方法?谢谢!

【问题讨论】:

我想你忘了把它们声明为静态的。 啊,是的,谢谢...!!我刚刚修好了.... 我会说这是不推荐的。虽然 SO 关闭了自以为是的问题.. 【参考方案1】:

如果您只想对全局变量/函数进行分组(就像您在这里实际所做的那样),只需将它们放在命名空间中即可。

OTOH,您所做的似乎很像单例模式,在这里您可以找到一些建议和大量链接/欺骗:

C++ Singleton design pattern

【讨论】:

以上是关于大量使用静态成员变量是一种好习惯吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将函数放入 javascript 对象中是一种好习惯吗? [复制]

在每个可能的地方都使用指针是一种好习惯吗? [复制]

在 C 中释放 NULL 指针是一种好习惯吗? [复制]

将 Optional 用作类中的属性是一种好习惯吗? [复制]

在 MySQL 的表名中使用点是一种好习惯吗

在 javascript 中创建全局 urls 对象以便在模板中轻松反向路由是一种好习惯吗?