2009-11-07 65 views
11

如果您有一个将被修改且需要在整个程序中保留的类的数据,但仅在一个成员函数中使用,是否优先将该变量设置为本地静态变量例行公事,使其成为班级的一员?静态变量与成员

回答

15

问题不在于“数据是否会在整个程序中使用”,而是“如果您创建了这个类的两个对象,是否希望它们共享这些数据?”如果是,请将其设为静态。如果不是,不要。

+2

谢谢。我忘记了即使类成员函数中的局部静态变量也被该类的所有对象共享。 – Anonymous

4

我会争辩说,在大多数情况下,你不应该使用本地静态变量,而应该使用静态成员变量。然后问题退化为如果该变量应该在类实例之间共享或不共享。

1

将局部变量声明为静态意味着您的方法现在具有独立于对象状态的状态。在维护此代码时(例如复制构造函数实现,赋值,序列化)以及读取代码时(方法行为不清晰),可能会导致很多错误。
避免使用静态本地化,除非你有一些很好的理由(唯一我能想到的是单线程singletone实现)。