Sagen wir, ich erstellen:Gibt es ein Risiko, dass die lokale statische Variable einer Methode zwischen Instanzen geteilt wird?
class Hello {
public:
int World(int in)
{
static int var = 0; // <<<< This thing here.
if(in >= 0) {
var = in;
} else {
cout << var << endl;
}
}
};
Nun, wenn ich tun:
Hello A;
Hello B;
A.World(10);
A.World(-1);
B.World(-1);
Ich bin Ausgabe von "10" durch einen anderen "10", gefolgt bekommen. Der Wert der lokalen Variablen einer Methode, die gerade von einer Instanz einer Klasse auf eine andere übertragen wurde.
Es ist nicht überraschend - technisch Methoden sind nur Funktionen mit einem versteckten this
Parameter, so sollte eine statische lokale Variable genau wie in gemeinsamen Funktionen verhalten. Aber ist es garantiert? Ist es ein Verhalten, das durch den Standard erzwungen wird, oder ist es lediglich ein glückliches Nebenprodukt davon, wie der Compiler mit Methoden umgeht? Mit anderen Worten - ist dieses Verhalten sicher zu verwenden? (... über das Standardrisiko hinaus, jemanden zu verwirren, der nicht gewusst hat ...)
Ebenso wichtig wie die Speicherdauer ist die Tatsache, dass der Name 'var' jetzt * interne Verknüpfung * hat (im Gegensatz zu" keine Verknüpfung "), und somit beziehen sich alle Instanzen des Namens auf die gleiche Entität. –
@KerrekSB, sichere Sache. Werde hinzufügen. – SergeyA