2009-11-07 28 views
11

Se si dispone di dati per una classe che verrà modificata e deve essere mantenuta in tutto il programma, ma è utilizzata solo in una funzione membro, è preferibile rendere tale variabile una variabile statica locale del routine in cui si trova o ne fa un membro della classe?variabile statica vs. membro

risposta

15

La domanda non è "i dati verranno utilizzati in tutto il programma", ma piuttosto "se si creano due oggetti di questa classe, vuoi che condividano questi dati?" Se sì, rendilo statico. Se no, non farlo.

+2

Grazie. Ho dimenticato che anche le variabili statiche locali nelle funzioni dei membri della classe sono condivise da tutti gli oggetti di quella classe. – Anonymous

4

Direi che nella maggior parte dei casi, non si dovrebbe mai utilizzare una variabile statica locale e utilizzare invece una variabile membro statica. Quindi la domanda degenera se tale variabile deve essere condivisa tra le istanze di classe o meno.

1

Dichiarare una variabile locale come statica significa che il metodo ora ha stato, separato dallo stato dell'oggetto. Può portare a molti errori quando si mantiene questo codice (come implementazione del costruttore di copia, assegnazione, serializzazione) e durante la lettura (comportamento del metodo non chiaro).
Evitare l'uso di locals statici a meno che non si abbia una buona ragione (l'unica cosa a cui posso pensare è l'implementazione singletone a thread singolo).

Problemi correlati