2009-11-07 22 views
11

Wenn Sie Daten für eine Klasse haben, die geändert wird und im gesamten Programm beibehalten werden muss, aber nur in einer Elementfunktion verwendet wird, wird diese Variable vorzugsweise als lokale statische Variable der Klasse verwendet Routine, in der es ist oder es ein Mitglied der Klasse machen?statische Variable vs. Element

Antwort

15

Die Frage ist nicht "werden die Daten im gesamten Programm verwendet werden", sondern "Wenn Sie zwei Objekte dieser Klasse erstellen, möchten Sie, dass sie diese Daten teilen?" Wenn ja, mache es statisch. Wenn nein, nicht.

+2

Danke. Ich habe vergessen, dass sogar lokale statische Variablen in Klassenmemberfunktionen von allen Objekten dieser Klasse gemeinsam genutzt werden. – Anonymous

4

Ich würde argumentieren, dass Sie in den meisten Fällen nie eine lokale statische Variable verwenden sollten, und stattdessen eine statische Elementvariable verwenden. Dann degeneriert die Frage, ob diese Variable unter den Klasseninstanzen geteilt werden soll oder nicht.

1

Wenn Sie eine lokale Variable als statisch deklarieren, bedeutet dies, dass Ihre Methode jetzt einen vom Status des Objekts getrennten Zustand hat. Es kann zu vielen Fehlern bei der Pflege dieses Codes (z. B. bei der Implementierung des Kopierkonstruktors, der Zuweisung, der Serialisierung) und beim Lesen (unklares Methodenverhalten) kommen.
Vermeiden Sie die Verwendung von statischen Einträgen, es sei denn, Sie haben einen guten Grund (der einzige, den ich vorstellen kann, ist Single-Thread-Singletone-Implementierung).