問題は、何を使用するのが最善か、あるいはより良い方法かということです。あるクラスに属する関数があり、この関数が静的変数を使用する必要があるとします。2つの可能なアプローチがあります-この変数をクラスのメンバーとして宣言するには:
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
....
}
2番目のバリアントにはいくつかの利点があります。これにより、カプセル化が改善され、実装の詳細がより適切に分離されます。したがって、おそらく他のクラスでこの関数を使用する方が簡単でしょう。また、この変数を1つの関数だけで変更する必要がある場合は、他のメソッドによる誤ったデータ破損を防ぐことができます。
静的変数を複数のメソッド(クラス関数)間で共有する必要がある場合に使用するのは最初のバリアントだけであることは明らかですが、質問は静的変数を単一の関数にのみ使用する必要がある場合に関係します。その場合、最初のバリアントに利点はありますか?私はいくつかのマルチスレッド関連のものについてのみ考えることができます...