メンバー関数の静的変数: 共有またはインスタンス固有?
メンバー関数内の静的変数は、C で独自の動作を持ちます。以下のクラス定義を考えてみましょう:
class A { void foo() { static int i; i++; } };
疑問が生じます: クラス A の複数のインスタンスが作成された場合、1 つのインスタンスで foo() を呼び出すと、すべてのインスタンスの静的変数 i が変更されますか?
インスタンスごとに個別の i コピーが期待されるのに反して、メンバー関数の静的変数は異なる動作をします。指定された例では、静的変数 i のコピーはプログラム全体内に 1 つだけ存在します。
クラス A のインスタンスはすべて、同じ i 変数に影響を与え、その変数はプログラムの存続期間全体にわたって存続します。説明すると、
A o1, o2, o3; o1.foo(); // i = 1 o2.foo(); // i = 2 o3.foo(); // i = 3 o1.foo(); // i = 4
したがって、クラス A のインスタンスに対して foo() を呼び出すたびに、共有変数 i がインクリメントされます。これらの静的変数は、クラスのすべてのインスタンス間でデータを共有するメカニズムを提供します。
以上がメンバー関数の静的変数はクラス インスタンス間で値を共有しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。