我是否更喜欢在类方法中使用静态类变量或静态变量?

时间:2012-10-10 10:19:14

标签: c++ static static-members

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

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
    ....
}

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

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

3 个答案:

答案 0 :(得分:1)

这很简单 - 如果逻辑上它属于类static,则使用instanceCounter成员,如果它在逻辑上属于某个函数,则使用static本地{ numberOfTimesThisMethodWasCalled)。

答案 1 :(得分:1)

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

但是,如果变量只需要在函数中可见,并且需要在函数的每次调用中都是通用的,那么只需将它变为局部static变量即可。

答案 2 :(得分:1)

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

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

相关问题