问题是,什么是最好的或更好的做法。假设我有一个函数,它属于某个类,这个函数需要使用一些静态变量。有两种可能的方法 - 将此变量声明为类的成员:
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
....
}
我可以看到第二种变体的一些优势。它提供了更好的封装并更好地隔离了实现的细节。所以在其他类中使用这个函数可能会更容易。如果这个变量只能由单个函数修改,那么它可以防止其他方法导致一些错误的数据损坏。
虽然很明显,当您需要在多个方法(类函数)之间共享静态变量时,第一个变体是唯一使用的变体,但问题与静态变量应仅用于单个函数的情况有关。在这种情况下,第一个变体有什么优势吗?我只能考虑一些与多线程相关的东西......