Diciamo che ho questo programma:variabili statiche a metodi di istanza
class Foo {
public:
unsigned int bar() {
static unsigned int counter = 0;
return counter++;
}
};
int main()
{
Foo a;
Foo b;
}
(Naturalmente questo esempio non ha senso dato che avevo, ovviamente, dichiaro "contro" come attributo privato, ma è solo per illustrare il problema).
Mi piacerebbe sapere come si comporta C++ in questo tipo di situazione: la variabile "contatore" nel metodo bar() sarà la stessa per ogni istanza?
+1 per menzionare i pericoli in un ambiente con multithreading. – Omnifarious
Supponendo che il compilatore non lo gestisca già per te. La definizione della lingua è che la variabile è consistente in tutte le chiamate al metodo. Quindi è compito del compilatore implemen- tarlo, quindi nei linguaggi multi-thread (prossima versione di C++) è il lavoro dei compilatori. In questa versione dipende dall'integrazione del compilatore con la libreria di threading. gcc ha già questo coperto e garanzie che l'accesso alla variabile statica è sicuro su più thread. –
@ Martin York: vale a dire che le variabili statiche in C++ 0x sono garantite come thread locali? Che interessante, e forse potrebbe sorprendere molto alcune persone. Come un bel contatore di istanze di classi statiche. All'improvviso dovrai contare le istanze per thread. Non posso credere che farebbero un cambiamento del genere. Sei sicuro?! – Omnifarious