Librairie dynamique et variables remanentes

Fermé
MrLuck Messages postés 43 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 1 décembre 2010 - 15 avril 2009 à 10:53
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 15 avril 2009 à 15:17
Bonjour,
je travaille sur un programme en C++ qui utilise des variables remanentes lors de l'instanciation d'un certain objet. J'aimerai faire plusieurs appels de cet objet mais je me retrouve bloqué par ces variables remanentes.

Exemple : mon objet est un coureur cycliste, et j'ai une variable remanente pour sa vitesse, mais lorsque j'ai plusieurs coureurs, si j'augmente la vitesse d'un de mes coureurs, je change la vitesse de tous.

On m'a parlé d'une technique à l'aide de librairies dynamiques mais je ne trouve aucune documentation dessus.
D'apres ce qu'on m'a dit, si mon objet appel une librairie dynamique, les variables remanentes seraient propre à cette librairie ce qui me permettrait d'utiliser plusieurs instances de mon objet sans problemes.

Pouvez vous me dire si vous avez d'autres technique ou si quelqu'un connait celle des librairies dynamiques ?

Merci

3 réponses

mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 7 572
15 avril 2009 à 14:22
Si j'ai bien compris, ce que tu appelles une variable rémanente est une variable statique ?

Si c'est une variable statique interne à :
- une classe ou une structure : elle est partagée par toutes les instances de ladite classe/structure
- une fonction : la valeur de la variable est mémorisée entre deux appels de cette fonction
- un fichier : la variable peut être vue comme une variable globale dont la portée est limitée au fichier

Supposons que tu aies une classe cycliste dont l'un des attributs est un unsigned qui stoke la vitesse. Alors comme cette vitesse est spécifique au cycliste elle ne doit pas être statique.

Au contraire, un compteur d'instance (un compteur qui compte le nombre de cycliste, incrémenté à chaque appel d'un constructeur de la classe cycliste et décrémenté à chaque appel du destructeur) est commun aux cyclistes, donc est un membre statique de la classe cycliste.
class cycliste{
  protected:
    unsigned vitesse;
    static unsigned compteur_instance;

  public:

    cycliste(unsigned vitesse0 = 0):vitesse(vistesse0){
      ++compteur_instance;
    }

    ~cycliste(){
      --compteur_instance;
    }
};

cycliste::compteur_instance = 0; // superflu à priori

Voir aussi :
http://www.commentcamarche.net/forum/affich 9289549 compteur d objets c#4

Quoi qu'il en soit je ne vois pas le rapport avec des histoires de librairies dynamiques. Une librairie dynamique (fichier .so sous linux) peut être vu comme un .o à ceci prêt qu'elle n'est pas incorporée dans l'exécutable final contrairement à une librairie dynamique (.a sous linux). C'est ce qui permet pour un même programme de tourner avec différentes versions de librairies. A aucun moment la notion de portée et de partage de variable n'est modifiée.

Bonne chance
1
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 328
15 avril 2009 à 14:25
C'est quoi une variable rémanente ? jamais entendu parlé.
0
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 7 572
15 avril 2009 à 14:28
Il suffit de regarder sur google :-) C'est une variable statique apparemment.
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 328
15 avril 2009 à 15:17
Quel con, moi qui regardait dans mon cours de C++ :-p
0