Подтвердить что ты не робот

Статическая переменная против члена

Если у вас есть данные для класса, который будет изменен и должен быть сохранен во всей программе, но используется только в одной функции-члена, предпочтительнее ли использовать эту переменную локальную статическую переменную для этой процедуры, в которой она находится или сделать его членом класса?

4b9b3361

Ответ 1

Вопрос не в том, "будут ли данные использоваться во всей программе", а скорее "если вы создадите два объекта этого класса, вы хотите, чтобы они делили эти данные?" Если да, сделайте его статическим. Если нет, не делайте этого.

Ответ 2

Я бы сказал, что в большинстве случаев вы никогда не должны использовать локальную статическую переменную и вместо этого используете статическую переменную-член. Тогда вопрос вырождается, если эта переменная должна быть разделена между экземплярами класса или нет.

Ответ 3

Объявление локальной переменной как статического означает, что ваш метод теперь имеет состояние, отдельно от состояния объекта. Это может привести ко многим ошибкам при сохранении этого кода (например, реализация конструктора копирования, назначение, сериализация) и при чтении (нечеткое поведение метода).
Избегайте использования статических локалей, если у вас нет веских оснований (единственное, о чем я могу думать, это однопоточная реализация в одиночном режиме).