对我而言,通常会创建一个全局类,其中所有成员都是静态的。其他所有类都将从此全局类继承。
我想知道这是否是一种好的实践方式?
有人有什么建议吗?
对我而言,通常会创建一个全局类,其中所有成员都是静态的。其他所有类都将从此全局类继承。
我想知道这是否是一种好的实践方式?
有人有什么建议吗?
有两件事让我感到烦恼:使用全局变量是不好的,但有时候难以避免,然而我感到烦恼的是:
这两者的结合效果惊人。
假设我创建一个将访问全局变量的类,从你的反模式中得出:
#include "globals.h"
class MyClass: Globals // for my own sake I assume it's not public inheritance
{
};
当然,#include
在头文件中是必须的,因为我从中继承。因此,每次我添加/更改全局变量之一,即使只有一个类使用它...我都需要重新编译整个应用程序。
如果我们曾经在同一个团队工作过,那么这将会引起你非常严厉、非常严肃的评论...至少可以这么说。
你提出的做法并没有解决与全局变量相关的问题。
本文是与C语言和嵌入式系统相关的,但同样适用于你的问题。
首先,全局状态很糟糕。它会严重复杂化程序的理解,因为任何部分的行为都可能依赖于全局变量。它使测试变得更加困难。它提供了一种方式,使得两个遥远的函数可以创建一个不一致的状态,可能会破坏另一个函数,并且这将非常难以进行调试。
全局状态的性质并不重要。这通常是Singleton模式所诟病的地方。
然而,让每个类继承自一个全局变量类是一个不好的想法。在C++中,应该谨慎使用继承,因为它会将两个类在实现上联结在一起。通常,在任何形式下都不应该让所有的类都从一个基类继承,而且C++并不处理多重继承非常好。由于如果A继承自B并且它们都从Global继承,那么Global将出现两次在A的继承层次结构中,因此很容易出现“致命菱形”效应。
糟糕!
全局变量就是全局变量。即使用一个看起来像成员变量的名称对其重新命名,也不会改变这一点。你在普通全局变量上遇到的每个问题,在将其作为公共静态成员的全局变量方案中仍然存在(可能还有一些新问题)。