Référence ou pointeurs?

Référence ou pointeurs? - C++ - Programmation

Marsh Posté le 17-02-2009 à 22:57:32    

Bonjour,
 
je me pose une question existentielle quant à la différence entre un passage par référence et par adresse.
Avec Qt, j'ai une méthode qui Imprime un élément. Elle utilise l'objet QPainter(QPaintDevice *).
Cette méthode Imprime passe en paramètre la QPaintDevice.
D'habitude, par "flemme", je passe toujours en référence mes objets.
Sauf que là je m'interroge sur l'utilité de la chose
 
Car j'ai dans un cas  
 

Code :
  1. MaClasse::Imprime(QPaintDevice &device)
  2. {
  3. ...
  4. QPainter painter(&device) ;//adresse de la référence=adresse du référent
  5. ...
  6. }


ce qui me parait tiré par les cheveux(prendre l'adresse d'une référence)
et dans l'autre
 

Code :
  1. MaClasse::Imprime(QPaintDevice *device)
  2. {
  3. ...
  4. QPainter painter(device);
  5. ...
  6. }


 
Qui me parait plus logique, mais on m'a toujours dit d'utiliser des réfs.
Je pense que les deux font la même chose exactement, mais en terme de performance et de "bien coder", c'est pareil?
 
Merci


---------------
I guess my real ennemy is me
Reply

Marsh Posté le 17-02-2009 à 22:57:32   

Reply

Marsh Posté le 17-02-2009 à 23:11:16    

en terme de performance, c'est strictement identique, après, les goûts et les couleurs ...


---------------
last.fm
Reply

Marsh Posté le 18-02-2009 à 02:20:34    

theshockwave a écrit :

en terme de performance, c'est strictement identique, après, les goûts et les couleurs ...


 
Notre prof nous a toujours dit que derrière les références on a des pointeurs donc ça revient au même.
 
Je pense que l'on recommande d'utiliser les références car leur emploi est plus naturel que celui des pointeurs.
 
De plus elles ont l'avantage de ne pouvoir jamais être initialisée à NULL ce qui élimine d'office certaines erreurs.

Reply

Marsh Posté le 18-02-2009 à 07:28:41    

prendre l'adresse d'une référence est parfaitement valide et fait ce que l'on pense (aka prendre l'adresse du referee).
 
Par contre, je m'inquièterais plus de passer des références avec le bon niveau de constness.

Reply

Marsh Posté le 18-02-2009 à 11:58:11    

Hormis quelques cas bien contraints (operateurs, necessite de pouvoir passer NULL), le choix est assez arbitraire et releve plutot de conventions que d'autre chose.  Personnellement, je ne vais pas passer une reference si elle sera conservee au dela du retour de la fonction (de la duree de vie de l'objet pour un constructeur).  De meme, je ne vais pas passer une reference si je fais un delete sur le pointeur correspondant.  Mais ce choix n'est pas universel, certains utilisent simplement le fait que la reference ne peut pas etre NULL.
 
Joel, que ce soit des pointeurs ou des references, les problemes de const me semblent parfaitement identiques.

Reply

Marsh Posté le 19-02-2009 à 13:31:52    

Un Programmeur a écrit :

 
 
Joel, que ce soit des pointeurs ou des references, les problemes de const me semblent parfaitement identiques.


+1

Reply

Marsh Posté le 19-02-2009 à 14:02:10    

Un Programmeur a écrit :

Joel, que ce soit des pointeurs ou des references, les problemes de const me semblent parfaitement identiques.


Oui, je faisais juste une remarque sur le snippet posté plus haut ;)

Reply

Marsh Posté le 23-02-2009 à 22:57:21    

Ok, merci pour les réponses. Je vais donc plutôt vérifier le coté "constance"(français?) de ce que je passe et je vais passer par réf.


---------------
I guess my real ennemy is me
Reply

Marsh Posté le 26-02-2009 à 09:52:43    

on dit constitude :p

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed