Digamos que tengo este programa:Las variables estáticas en los métodos de instancia
class Foo {
public:
unsigned int bar() {
static unsigned int counter = 0;
return counter++;
}
};
int main()
{
Foo a;
Foo b;
}
(Por supuesto, este ejemplo no tiene sentido desde que había, obviamente, declaro "contador" como un atributo privado, pero es sólo para ilustrar la problema).
Me gustaría saber cómo se comporta C++ en este tipo de situación: ¿la variable "contador" en el método bar() será la misma para cada instancia?
+1 por mencionar los peligros en un entorno multiproceso. – Omnifarious
Suponiendo que el compilador aún no lo maneje por usted. La definición del lenguaje es que la variable es consistente en todas las llamadas al método. Por lo tanto, es el trabajo del compilador para hacer cumplir esto, por lo que en los lenguajes multi-hilo (la próxima versión de C++) es el trabajo de los compiladores. En esta versión, depende de la integración del compilador con la biblioteca de subprocesos. gcc ya tiene esto cubierto y garantiza que el acceso a la variable estática es seguro en múltiples hilos. –
@Martin York: es decir, las variables estáticas en C++ 0x están garantizadas para ser locales de subprocesos? Qué interesante, y posiblemente sorprenda grandemente a algunas personas. Como un buen contador de instancias de clases estáticas. De repente, estarás contando instancias por hilo en su lugar. No puedo creer que hagan un cambio como ese. ¡¿Estás seguro?! – Omnifarious