IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

variable globale dans le destructeur ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Par défaut variable globale dans le destructeur ?
    Bonjour

    je me pose la petite question suivante :

    est ce qu'une variable globale en c++ est considéré comme une variable statique( donc pas d'appel dans le destructeur donc si je me rappelle bien ) ou bien comme une variable dynamique ( appel au mot clé delete dans le destructeur )

    Merci bien

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Heu... il va falloir que tu précises ta question, ou que tu emploies les bons termes.

    Voilà ce que je peux dire :
    Une variable globale est une variable qui se situe dans la portée globale, qui est donc accessible de partout dans une unité de traduction, voir même de plusieurs unités de traduction si elle n'est pas déclarée static.

    Ensuite la caractéristique "static" n'a pas vraiment de rapport avec allocation sur la pile (allocation statique), et allocation sur le tas (allocation dynamique).

    Il faudra peut être que tu lises quelques ouvrages sur le c++, pour mieux comprendre tout ça.
    Par exemple :
    http://c.developpez.com/cours/#cours-cpp

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Tout d'abord, il faut savoir qu'il est préférable, autant se faire se peut, d'éviter l'utilisation de variables globales...

    La raison en est simple: comme n'importe quelle fonction y a accès, et peut donc la modifier, tu risques fort d'appeler une fonction qui la modifie alors que ce n'était pas ton intention.

    Ensuite, il faut savoir qu'une variable globale n'est quand même rien d'autre qu'une variable...

    Elle peut donc être un pointeur - qui utilisera l'allocation dynamique de la mémoire - ou non.

    Si c'est un pointeur, il faudra *vraissemblablement* l'initialiser avec new, et penser à en libérer la mémoire avec delete, car tu risque énormément de problème à l'initialiser en disant qu'elle reçoit l'adresse d'une variable locale.

    Mais si ce n'est pas un pointeur, tu peux l'initialiser de manière tout à fait classique, exactement comme une variable locale .

    Il faut enfin faire attention à la réciprocité de ce que l'on dit, car elle est rarement présente:

    Si on peut considérer qu'une variable déclarer avec le spécificateur de classe de stockage (storage class specifier) static est une sorte de variable globale (et encore, c'est une variable "globale" assez particulière ), on ne peut par contre pas considérer que toutes les variables globales sont des variables déclarées avec le spécificateur de classe de stockage static

    Enfin, il y a le problème qu'un seul terme (statique, en l'ocurence) peut s'appliquer à deux choses tout à fait distinctes:

    D'un coté, il peut s'appliquer en tant que spécificateur de classe de stockage - par opposition aux termes auto, extern, register et mutable - et de l'autre, il peut s'appliquer à la manière dont la mémoire nécessaire à la donnée est allouée à la variable, par opposition au terme dynamique.

    Dans le premier cas, il indiquera que toutes les instances de la variable utiliseront la même adresse mémoire, alors que, dans le second, il indiquera que la mémoire est allouée sur le tas lors de la déclaration de la variable, et donc libérée une fois que l'on quitte la portée dans laquelle la variable a été déclarée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variable Globale dans un module de formulaire.
    Par wisiwi dans le forum Access
    Réponses: 5
    Dernier message: 30/03/2006, 14h03
  2. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 10h55
  3. Variables globales dans une classe
    Par vanitom dans le forum C++
    Réponses: 16
    Dernier message: 14/01/2005, 14h40
  4. Variables globales dans fichiers entête
    Par benj_f04 dans le forum C++
    Réponses: 5
    Dernier message: 13/08/2004, 09h06
  5. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo