2009-11-07 23 views
11

Jeśli posiadasz dane dla klasy, która będzie modyfikowana i musi zostać zachowana w całym programie, ale jest używana tylko w jednej funkcji składowej, preferuje ustawienie tej zmiennej jako lokalną zmienną statyczną rutyna, w której jest lub jest członkiem klasy?zmienna statyczna kontra element członkowski

Odpowiedz

15

Pytanie nie brzmi "czy dane będą używane w całym programie", ale raczej "jeśli zrobisz dwa obiekty tej klasy, czy chcesz, aby te dane były udostępniane?" Jeśli tak, spraw, by był statyczny. Jeśli nie, nie rób tego.

+2

Dzięki. Zapomniałem, że nawet lokalne zmienne statyczne w funkcjach członków klasy są współużytkowane przez wszystkie obiekty tej klasy. – Anonymous

4

Twierdzę, że w większości przypadków nie należy nigdy używać lokalnej zmiennej statycznej, a zamiast niej używać statycznej zmiennej składowej. Następnie pytanie ulega degeneracji, jeśli zmienna ta powinna być współużytkowana w instancjach klasy, czy też nie.

1

Zgłaszanie zmiennej lokalnej jako statycznej oznacza, że ​​twoja metoda ma teraz stan, niezależnie od stanu obiektu. Może to prowadzić do wielu błędów podczas utrzymywania tego kodu (takich jak implementacja konstruktora kopii, przypisanie, serializacja) i podczas czytania (niejasne zachowanie metody).
Unikaj używania locali statycznych, chyba że masz jakiś dobry powód (jedyne, co mogę wymyślić to implementacja pojedynczego wątku singletone).

Powiązane problemy