Lassen Sie uns sagen, ich habe dieses Programm:Statische Variablen in Instanzmethoden
class Foo {
public:
unsigned int bar() {
static unsigned int counter = 0;
return counter++;
}
};
int main()
{
Foo a;
Foo b;
}
(Natürlich ist dieses Beispiel macht keinen Sinn, da ich offensichtlich „counter“ als privates Attribut erklären würde, aber es ist nur die zur Veranschaulichung Problem).
Ich würde gerne wissen, wie C++ in einer solchen Situation verhält: Wird die Variable "counter" in der Methode bar() für jede Instanz gleich sein?
+1 für die Erwähnung von Gefahren in einer Multithread-Umgebung. – Omnifarious
Angenommen, der Compiler behandelt das nicht bereits für Sie. Die Sprachdefinition besteht darin, dass die Variable für alle Aufrufe der Methode konsistent ist. Daher ist es der Compiler-Job, der dies erzwingt, also in Multi-Threaded-Sprachen (nächste Version von C++) ist es der Compiler-Job. In dieser Version kommt es auf die Integration des Compilers mit der Threading-Bibliothek an. gcc hat dies bereits abgedeckt und garantiert, dass der Zugriff auf die statische Variable über mehrere Threads hinweg sicher ist. –
@Martin York: d. H. Statische Variablen in C++ 0x sind garantiert Thread-Local? Wie interessant, und es könnte möglicherweise einige Leute sehr überraschen. Wie ein netter statischer Klasseninstanzzähler. Plötzlich würden Sie stattdessen Instanzen pro Thread zählen. Ich kann nicht glauben, dass sie so etwas ändern würden. Bist du sicher?! – Omnifarious