Скажем, у меня есть эта программа:Статические переменные в методах экземпляра
class Foo {
public:
unsigned int bar() {
static unsigned int counter = 0;
return counter++;
}
};
int main()
{
Foo a;
Foo b;
}
(Конечно, этот пример не имеет смысла, так как я бы явно объявить «счетчик» в качестве частного атрибута, но это только для иллюстрации проблема).
Я хотел бы знать, как C++ ведет себя в подобной ситуации: будет ли переменная «counter» в методе bar() быть одинаковой для каждого экземпляра?
+1 для обозначения опасностей в многопоточной среде. – Omnifarious
Предполагая, что компилятор уже не справляется с этим для вас. Определение языка состоит в том, что переменная является составной для всех вызовов метода. Таким образом, это задание компилятора для обеспечения этого, поэтому в многопоточных языках (следующая версия C++) это задание компиляторов. В этой версии это зависит от интеграции компилятора с библиотекой потоков. В gcc уже есть покрытые и гарантированные, доступ к статической переменной безопасен для нескольких потоков. –
@Martin York: то есть статические переменные в C++ 0x гарантированно являются потоковыми локальными? Как интересно, и это может сильно удивить некоторых людей. Как хороший счетчик экземпляров статического класса. Внезапно вы будете подсчитывать экземпляры на поток вместо этого. Я не могу поверить, что они так изменились. Ты уверен?! – Omnifarious