问题是,使用什么是最好的或者更好的做法。假设我有一个函数,它属于某个类,这个函数需要使用一些静态变量。有两种可能的方法 - 将此变量声明为类的成员:
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
....
}
我可以看到第二种变体的一些优点。它提供了更好的封装,更好地隔离了实现的细节。因此,可能更容易在其他类中使用此函数。如果这个变量只能由一个函数修改,那么它可以防止其他方法的某些错误数据损坏。
虽然很明显,当你需要在几个方法(类函数)之间共享一个静态变量时,第一个变体是唯一使用的,但问题与静态变量应该只用于单个的情况有关。功能。在这种情况下,第一个变体有什么优势吗?我只能考虑一些与多线程相关的东西......
答案 0 :(得分:1)
这很简单 - 如果逻辑上它属于类static
,则使用instanceCounter
成员,如果它在逻辑上属于某个函数,则使用static
本地{ numberOfTimesThisMethodWasCalled
)。
答案 1 :(得分:1)
static
与否的选择完全取决于上下文。如果特定变量需要在类的所有实例中共用,则将其设为static
。
但是,如果变量只需要在函数中可见,并且需要在函数的每次调用中都是通用的,那么只需将它变为局部static
变量即可。
答案 2 :(得分:1)
函数中静态数据成员和静态变量之间的区别在于,首先在启动时初始化,第二次第一次调用函数(延迟初始化)。
在多线程应用程序中使用函数时,延迟初始化会产生问题,如果设计不需要,我更喜欢使用静态成员。