2009-11-07 10 views
11

変更され、プログラム全体で保持される必要があるが、1つのメンバ関数でのみ使用されるクラスのデータがある場合、その変数をそれがそのクラスのメンバーになっているかルーチンになっているか?静的変数とメンバ

答えて

15

質問は「データはプログラム全体で使用されますか?」ではなく、「このクラスの2つのオブジェクトを作成する場合は、このデータを共有しますか?はいの場合は静的にします。いいえの場合は、しないでください。

+2

ありがとうございました。私はクラスメンバ関数のローカル静的変数でさえそのクラスのすべてのオブジェクトで共有されていることを忘れていました。 – Anonymous

4

私はほとんどの場合、ローカル静的変数を使用してはならず、静的メンバー変数を使用するべきではないと主張します。次に、その変数がクラスインスタンス間で共有されるべきかどうかにまで縮退する。

1

staticとしてローカル変数を宣言すると、メソッドはオブジェクトの状態とは別の状態になります。このコードを保持するとき(コピーコンストラクタの実装、割り当て、シリアライゼーションなど)、それを読むときに(不明なメソッドの振る舞いなど)、多くの間違いにつながる可能性があります。
正当な理由がない限り、静的ローカルを使用しないようにしてください(私が考えることができるのは、シングルスレッドのシングルレット実装のみです)。

関連する問題