15 Stimmen

statische Variable vs. Mitglied

Wenn Sie Daten für eine Klasse haben, die geändert werden und während des gesamten Programms beibehalten werden müssen, aber nur in einer Mitgliedsfunktion verwendet werden, ist es dann besser, diese Variable zu einer lokalen statischen Variable der Routine zu machen, in der sie sich befindet, oder sie zu einem Mitglied der Klasse zu machen?

19voto

David Seiler Punkte 9491

Die Frage ist nicht: "Werden die Daten im gesamten Programm verwendet?", sondern vielmehr: "Wenn Sie zwei Objekte dieser Klasse erstellen, sollen sie diese Daten gemeinsam nutzen?" Wenn ja, machen Sie sie statisch. Wenn nein, tun Sie es nicht.

2 Stimmen

Danke. Ich hatte vergessen, dass auch lokale statische Variablen in Klassenfunktionen von allen Objekten dieser Klasse gemeinsam genutzt werden.

6voto

rlbond Punkte 62333

Ich würde behaupten, dass Sie in den meisten Fällen niemals eine lokale statische Variable verwenden sollten, sondern stattdessen eine statische Mitgliedsvariable. Dann stellt sich nur noch die Frage, ob diese Variable von den Klasseninstanzen gemeinsam genutzt werden sollte oder nicht.

3voto

Oren S Punkte 1792

Wenn Sie eine lokale Variable als statisch deklarieren, bedeutet das, dass Ihre Methode jetzt einen Zustand hat, der vom Zustand des Objekts getrennt ist. Dies kann zu vielen Fehlern bei der Pflege dieses Codes (z. B. Kopieren der Konstruktorimplementierung, Zuweisung, Serialisierung) und beim Lesen (unklares Verhalten der Methode) führen.
Vermeiden Sie die Verwendung von statischen Locals, es sei denn, Sie haben einen guten Grund (der einzige Grund, der mir einfällt, ist die Single-Thread-Implementierung von Singletone).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X