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 :

pointeurs, références, variables normales : efficacité


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut pointeurs, références, variables normales : efficacité
    Bonjour tout le monde,

    Je me posais une question:

    Parmi les pointeurs, les références, et les variables "normales", qu'est ce qui est mieux?

    Quand utiliser l'un plutôt qu'un autre?
    J'utilise en ce moment Qt, par exemple pour des bouttons(ou toute autre classe bien sûr), est-ce mieux d'utiliser des pointeurs, des variables normales(déclaré dans le header, et initialisé dans la liste d'initialisation), ou des références?


    J'ai déjà lu la partie de la FAQ sur les références, où ça dit quoi choisir entre référence et pointeur.Donc entre ces deux là j'ai compris, mais par rapport aux variables normales?

    Merci d'avance pour m'éclaircir sur ce point.

    PS: j'ai déjà fait des recherches sur le forum, et donc j'ai déjà lu quelques sujets sur les pointeurs et les références, mais j'en ai vu aucun parler des trois.

  2. #2
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    La question d'efficacité ne devrait pas intervenir pas dans le choix entre variable alloué sur la pile ou sur le tas.
    Le critère de choix est la porté et la durée de vie d'une variable.
    Pourquoi dans une classe déclaré un attribut par valeur plutôt que par existence ?
    On choisira par pointeur si la variable à une vie en dehors de la classe.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut
    OK merci, donc en faite, tant qu'une variable n'est utilisé que dans une classe et pas en dehors, on peut toujours utiliser des variables normal?

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 639
    Par défaut
    Salut,
    Citation Envoyé par phast Voir le message
    Bonjour tout le monde,

    Je me posais une question:

    Parmi les pointeurs, les références, et les variables "normales", qu'est ce qui est mieux?

    Quand utiliser l'un plutôt qu'un autre?
    J'utilise en ce moment Qt, par exemple pour des bouttons(ou toute autre classe bien sûr), est-ce mieux d'utiliser des pointeurs, des variables normales(déclaré dans le header, et initialisé dans la liste d'initialisation), ou des références?


    J'ai déjà lu la partie de la FAQ sur les références, où ça dit quoi choisir entre référence et pointeur.Donc entre ces deux là j'ai compris, mais par rapport aux variables normales?

    Merci d'avance pour m'éclaircir sur ce point.

    PS: j'ai déjà fait des recherches sur le forum, et donc j'ai déjà lu quelques sujets sur les pointeurs et les références, mais j'en ai vu aucun parler des trois.
    Ce n'est pas moi qui l'ai dit, mais un "sage" a un jour sorti:
    Dans, mettons 97% des cas, une optimisation prématurée est la route de tous les maux
    (c'est encore plus impressionnant en Anglais )

    De plus, les pointeurs ont cela de pas très agréable que tout ce qui touche à l'allocation dynamique de la mémoire leur "colle à la peau", et qu'il n'est vraiment pas gai de devoir se "pallucher" cela soi-même

    En résumé:
    1. Je crois que tu as surement des choses bien plus importantes auxquelles réfléchir pour gagner en perf avant d'en arriver à t'inquiéter des deux cycles d'horloges gagnés ou perdus par le fait d'utiliser les pointeurs ou les variables
    2. Du fait de tous les désagréments qu'ils trainent comme des boulets derrière eux, il est préférable de limiter l'usage des pointeurs aux cas où il n'y a pas d'autre possibilité (le polymorphisme, la nécessité de maintenir une collection d'objets dérivés en les faisant passer pour des objets du type de base ou le cas où un objet doit avoir un lien (non constant) avec un objet de type identique ou de nature à te faire entrer dans un cercle vicieux par exemple)
    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

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut
    OK merci pour vos réponses.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    La plupart des langages aujourd'hui allouent toute leur mémoire sur le tas et chaque variable est en fait un pointeur.
    Et ça a un coût en efficacité plutôt phénoménal, en fait... Certains diront que cC'est principalement parce qu'en C ou C++ on peut faire autrement que C et C++ restent encore populaires.

    Donc parler d'optimisation prématurée n'est pas adapté ici.
    Le cœur de la programmation C++, c'est la gestion de propriété, le RAII, et le placement mémoire des objets par rapport aux autres.

    Il faut donc bien comprendre quand utiliser quoi.

  7. #7
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par koala01 Voir le message
    (c'est encore plus impressionnant en Anglais )
    Effectivement.
    Citation Envoyé par Donald Knuth
    Optimization is the root of all evil
    (pour clore le HS)

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

Discussions similaires

  1. Petit problème avec les pointeurs et variable
    Par mitherkiller dans le forum C
    Réponses: 5
    Dernier message: 09/03/2007, 22h05
  2. collision entre variable normale et session ?
    Par kileak dans le forum Langage
    Réponses: 4
    Dernier message: 14/11/2006, 17h31
  3. [pointeurs/référence]
    Par poukill dans le forum C++
    Réponses: 18
    Dernier message: 10/05/2006, 11h49
  4. Réponses: 8
    Dernier message: 26/08/2004, 18h59

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