6
votes

Les variables locales statiques dans une classe persistent-elles entre des objets?

class MyClass
{
  static int staticInt;

  void instanceMethod( int param )
  {
    static int parameter = param;
  }
}
Clearly staticInt is shared between all instance of MyClass.  But can different instances of MyClass have different values of parameter the static local variable within instaceMethod?UpdateWhat about between program executions?  Certainly they could be different in multiple program instances?  What defines "scope" there - the execution unit?  The c++ runtime?UpdateThanks - this helped me squash a critical bug.  Wish I could accept them all, but I'm going with the first answer with no other criteria.

1 commentaires

Juste une note: l'initialisation du paramètre n'est généralement pas threadsafe.


4 Réponses :


8
votes

Il existe exactement une instance de paramètre .

Si vous souhaitez une instance de paramètre pour chaque instance de la classe, utilisez une variable de membre non statique.


0 commentaires

1
votes

Oui, ils persistent tous les deux. Ils ne peuvent pas avoir différentes valeurs entre les instances.


2 commentaires

Qu'en est-il entre l'exécution du programme?


Non, ils ne persistent pas entre les exécutions.



8
votes

Pour avoir des valeurs différentes du paramètre pour différentes instances, vous devez créer paramètre un membre non statique de la classe.

Dans votre version actuelle Toutes les instances partagent le même paramètre objet . Tous les objets statiques se comportent exactement le même à cet égard. La seule chose qui dépend du point de déclaration est la lune du nom. c'est-à-dire que les régions où le nom est visible. Quant à la durée de vie et aux propriétés de retenue de valeur de la variable - elles sont toujours les mêmes. C'est ce que le respect est comme une variable "globale", quel que soit l'endroit où vous le déclarez.

Dans votre exemple, il n'y a pas de différence entre paramètre et staticint en ce qui concerne leurs propriétés de retenue de valeur. La seule différence est que staticint est accessible à tous les membres de la classe, tandis que paramètre est uniquement accessible à instanqueMethod méthode.

La langue ne vous fournit aucun moyen de créer des variables dont les valeurs persistent entre les exécutions du programme. Ce type de persistance doit être mis en œuvre manuellement.


2 commentaires

@AUDREYT - Votre premier paragraphe mentionne le paramètre un membre non statique de la classe. Est-il courant de faire référence à des variables locales statiques par exemple en tant que membre statique? Est-ce techniquement correct ou plutôt depuis que l'effet est identique, nous pouvons le considérer comme un membre statique?


@ user144182: Non, les variables statiques locales ne sont pas membres de la classe. En C ++ "Être membre" est un concept principalement lié à la portée et à la nommage, pas à un comportement physique.



0
votes

Les valeurs ne sont pas persistantes à travers l'exécution du programme (entre deux invocation différentes du même programme)


0 commentaires