我应该更喜欢在类方法中使用静态类变量还是静态变量



问题是,使用什么是最好的或更好的做法。假设我有一个函数,它属于某个类,这个函数需要使用一些静态变量。有两种可能的方法-将此变量声明为类的成员:

class SomeClass
{
public:
....
void someMethod();
private:
static int m_someVar;
};
SomeClass::someMethod()
{
// Do some things here
....
++m_someVar;
}

或者在函数中声明它。

class SomeClass
{
public:
....
void someMethod();
};
SomeClass::someMethod()
{
static int var = 0;
++m_someVar;
// Do some things here
....
}

我看到了第二种变体的一些优点。它提供了更好的封装,并更好地隔离了实现的细节。因此,在其他类中使用这个函数可能会更容易。如果这个变量只能由一个函数修改,那么它可以防止其他方法的错误数据损坏。

虽然很明显,当你需要在几个方法(类函数)之间共享一个静态变量时,第一个变量是唯一可以使用的,但这个问题与静态变量应该只用于单个函数的情况有关。在这种情况下,第一种变体有什么优点吗?我只能考虑一些与多线程相关的东西。。。

这很简单-如果static成员在逻辑上属于类(有点像instanceCounter),则使用它;如果它在逻辑上隶属于函数(numberOfTimesThisMethodWasCalled),则可以使用static本地成员。

是否选择static完全取决于上下文。如果一个特定的变量需要在一个类的所有实例中是公共的,则将其设为static

但是,如果一个变量需要仅在函数中可见,并且需要在函数的每次调用中通用,那么只需将其设为本地static变量即可。

函数中静态数据成员和静态变量之间的区别在于,第一个在启动时初始化,第二个在第一次调用函数时初始化(惰性初始化)。

在多线程应用程序中使用函数时,懒惰的初始化可能会产生问题,如果设计不需要,我更喜欢使用静态成员。

最新更新