C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

References et pointeurs

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Manuel Leclerc
Guest





PostPosted: Mon Nov 20, 2006 5:01 pm    Post subject: References et pointeurs Reply with quote



En portant du code écrit "à la C" vers une approche un peu plus OO,
j'ai un petit peu de mal avec le concept de référence (je veux dire :
pourquoi utiliser des références plutôt que des pointeurs ?)

Existe-t-il quelques arguments "massues", concrètement
explicables avec du code, qui pourraient me convaincre
de systématiquement utiliser des références, alors que
j'ai une grosse tendance naturelle (qui me vient du C) à
utiliser les pointeurs ?

--
"Remember, objects in the mirror are actually behind you."
-
Back to top
Marc Boyer
Guest





PostPosted: Mon Nov 20, 2006 5:01 pm    Post subject: Re: References et pointeurs Reply with quote



Le 20-11-2006, Manuel Leclerc <manuel.leclerc (AT) alussinan (DOT) org> a écrit :
Quote:
En portant du code écrit "à la C" vers une approche un peu plus OO,
j'ai un petit peu de mal avec le concept de référence (je veux dire :
pourquoi utiliser des références plutôt que des pointeurs ?)

Existe-t-il quelques arguments "massues", concrètement
explicables avec du code, qui pourraient me convaincre
de systématiquement utiliser des références, alors que
j'ai une grosse tendance naturelle (qui me vient du C) à
utiliser les pointeurs ?

Il n'existe aucun argument "massue": de même que ce qu'on
peut faire en C, on pouvait le faire en assembleur, ce qu'on
peut faire en C++, on peut le faire en C.
Les références 'aident' le programmeur contre les erreurs
d'étourderie.

Quels sont les points forts des références:
a) on ne peut pas oublier de les initialiser
b) elles offrent une syntaxe plus facile, et protègent
contre les erreurs de typage
ex1: int* p;
p= 0; /* est-ce vraiment ça ou *p=0 qu'il voulait */
ex2: int **p; /* Qu'est-ce qu'il veut faire ? */

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
Back to top
Jean-Marc Bourguet
Guest





PostPosted: Mon Nov 20, 2006 7:38 pm    Post subject: Re: References et pointeurs Reply with quote



"Manuel Leclerc" <manuel.leclerc (AT) alussinan (DOT) org> writes:

Quote:
En portant du code écrit "à la C" vers une approche un peu plus OO, j'ai
un petit peu de mal avec le concept de référence (je veux dire : pourquoi
utiliser des références plutôt que des pointeurs ?)

Existe-t-il quelques arguments "massues", concrètement explicables avec
du code, qui pourraient me convaincre de systématiquement utiliser des
références, alors que j'ai une grosse tendance naturelle (qui me vient du
C) à utiliser les pointeurs ?

Les references on les utilise dans quatres contextes:

- comme parametres. Hors les cas ou il n'y a pas le choix (pas moyen de
faire un constructeur de copie qui prenne son argument autrement que par
reference, surcharger les operateurs a beaucoup moins de sens sans les
references, les references constantes peuvent etre liees a des
temporaires -- prendre l'adresse d'un temporaire est beaucou plus douteux
dans les cas ou c'est autorise-- il n'y a pas d'equivalent a NULL pour
les references), l'utilisation d'une reference ou d'un pointeur a peu de
consequences techniques. Le choix de l'un ou l'autre va resulter de ce
qu'on veut communiquer a l'appelant -- et le message passe resulte des
conventions du projet.

Certains utilisent les references systematiquement quand un objet est
obligatoire (donc qu'on ne pourrait pas passer NULL si l'argument etait
un pointeur). C'est simple a expliquer mais je n'aime pas tellement ce
choix. Sincerement, un code comme:
void Dispose(Foo& f) { delete &f; }
ne me plait pas, et ce qui ne me plait pas c'est que j'ai l'impression
qu'on se base sur quelque chose d'accidentel parce que c'est facile a
exprimer plutot qu'une caracteristique essentielle qui peut etre plus
importante a communiquer (si ca marche, c'est qu'il y a correlation entre
les deux).

J'ai deja donne ma regle a moi dans le passe, on peut l'exprimer
simplement ainsi: ne pas devoir prendre l'adresse d'une variable locale,
toujours pouvoir passer une variable locale a une reference. Le message
est que la fonction va agir sur la reference pendant son execution mais
ne va pas faire des choses qui entrainerait un dereferencement apres la
fin de celle-ci.

- comme resultats d'une fonction. Pour moi, la duree de validite d'une
reference retournee est plus courte que la duree de validite d'un
pointeur. Dans le premier cas, elle est vraissemblablement controllee
par le systeme retournant la reference; dans le second par le systeme
recevant le pointeur.

- comme variables. J'ai tendance a ne pas utiliser des references comme
variables. On alors avec une localite tres petite, pour simplifier une
expression.

- comme membres. On se retrouve un peu dans le cas des parametres, parce
que si on a un membre qui est une reference, sauf cas particulier, il
faut avoir une reference comme parametre des constructeurs. Ma regle
simple couvre assez bien les cas ou je les utilises. L'exemple
paramdigmatique serait vraissemblablement une classe RAI pour acquerir et
liberer un mutex. L'idee est que l'objet va agir sur la reference
pendant la duree de sa vie mais ne va pas faire des choses qui
entrainerait un dereferencement apres apres celle-ci.


Je crois que le probleme de fond, c'est celui de la politique de gestion de
duree de vie. Avoir differents moyens de specifier un objet (pointeur,
reference, pointeurs intelligents, variables locales, ...) permet de
documenter quelle politique est utilisee, permet de faire controller une
partie de celle-ci par le compilateur, permet de faire appliquer une partie
de celle-ci par le compilateur.

N'avoir qu'un moyen, comme dans certains langages, force la documentation
de ces choix d'une autre maniere qui ne peut pas etre verifiee statiquement
d'une part, et que le compilateur doit redecouvrir pour generer du code
efficace d'autre part (voir les papiers sur les techniques pour redecouvrir
qu'un objet est automatique dans les langages n'ayant pas cette notion).

A+

--
Jean-Marc
Back to top
meow
Guest





PostPosted: Mon Nov 20, 2006 7:40 pm    Post subject: Re: References et pointeurs Reply with quote

Pour moi il y a essentiellement l'utilisation comme paramètre de
fonctions. ça permet d'avoir une écriture plus fluide : plus besoin
de déréférencer, on bosse sur une sorte d'alias.
Back to top
James Kanze
Guest





PostPosted: Mon Nov 20, 2006 11:46 pm    Post subject: Re: References et pointeurs Reply with quote

Jean-Marc Bourguet wrote:
Quote:
"Manuel Leclerc" <manuel.leclerc (AT) alussinan (DOT) org> writes:

En portant du code écrit "à la C" vers une approche un peu plus OO, j'ai
un petit peu de mal avec le concept de référence (je veux dire : pourquoi
utiliser des références plutôt que des pointeurs ?)

Existe-t-il quelques arguments "massues", concrètement explicables avec
du code, qui pourraient me convaincre de systématiquement utiliser des
références, alors que j'ai une grosse tendance naturelle (qui me vient du
C) à utiliser les pointeurs ?

Les references on les utilise dans quatres contextes:

[...]
Quote:
- comme membres. On se retrouve un peu dans le cas des parametres, parce
que si on a un membre qui est une reference, sauf cas particulier, il
faut avoir une reference comme parametre des constructeurs. Ma regle
simple couvre assez bien les cas ou je les utilises. L'exemple
paramdigmatique serait vraissemblablement une classe RAI pour acquerir et
liberer un mutex. L'idee est que l'objet va agir sur la reference
pendant la duree de sa vie mais ne va pas faire des choses qui
entrainerait un dereferencement apres apres celle-ci.

Il ne faut pas oublier que si on utilise des références comme
membres, l'affectation devient assez problèmatique. Du coup, il
m'arrive souvent à utiliser un pointeur dans l'objet, tandis que
le paramètre du constructeur est une référence.

--
James Kanze (GABI Software) email:james.kanze (AT) gmail (DOT) com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.