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 

Usage des réferences en tant qu'attribut

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Sébastien Sénégas
Guest





PostPosted: Wed Jul 27, 2005 12:12 pm    Post subject: Usage des réferences en tant qu'attribut Reply with quote



Quelqu'un peut il me dire si il est choquant d'avoir un référence en
tant qu'attribut.

e.g.

class B;

class A
{
public:
A( B& b ) : _b( b ) {};
~A() {};

...

private:
B &_b;
}

Perso j'aime pas trop, mais j'ai certains collégues qui utilisent ça
sans sourciller, j'aimerais des arguments clairs justifiant s'il s'agit
d'une bonne manière ou d'une mauvaise habitude.
Back to top
franco bevilacqua
Guest





PostPosted: Wed Jul 27, 2005 12:26 pm    Post subject: Re: Usage des réferences en tant qu'attribut Reply with quote



Sébastien Sénégas wrote:
Quote:
Quelqu'un peut il me dire si il est choquant d'avoir un référence en
tant qu'attribut.

e.g.

class B;

class A
{
public:
A( B& b ) : _b( b ) {};
~A() {};

...

private:
B &_b;
}

Perso j'aime pas trop, mais j'ai certains collégues qui utilisent ça
sans sourciller, j'aimerais des arguments clairs justifiant s'il s'agit
d'une bonne manière ou d'une mauvaise habitude.

Je pense qu'il faut privilégier les références par rapport aux
pointeurs, car on ne peut pas detruire un référence. Par contre cela
suppose que l'objet referencé soit créé et maintenu à part, ce qui
demande plus de travail.
Voila mon avis.
@+

Back to top
adebaene@club-internet.fr
Guest





PostPosted: Wed Jul 27, 2005 1:46 pm    Post subject: Re: Usage des réferences en tant qu'attribut Reply with quote





Sébastien Sénégas a écrit :
Quote:
Quelqu'un peut il me dire si il est choquant d'avoir un référence en
tant qu'attribut.

e.g.

class B;

class A
{
public:
A( B& b ) : _b( b ) {};
~A() {};

...

private:
B &_b;
}

Perso j'aime pas trop,
Pourqoi cela? Si un objet A doit référencer un objet B et que cette

référence doit rester constante durant toute la durée de vie de
l'objet A, c'est la solution idéale il me semble. Qu'est ce qui te
choque là dedans exactement?

Quote:
mais j'ai certains collégues qui utilisent ça
sans sourciller, j'aimerais des arguments clairs justifiant s'il s'agit
d'une bonne manière ou d'une mauvaise habitude.
Pour moi il n'y a aucun souçi si on s'assure extérieurement que

l'objet B vit au moins aussi longtemps que l'objet A (mais on aurait le
même problème avec un pointeur).

Arnaud
MVP - VC


Back to top
Sébastien Sénégas
Guest





PostPosted: Wed Jul 27, 2005 2:23 pm    Post subject: Re: Usage des réferences en tant qu'attribut Reply with quote

[email]adebaene (AT) club-internet (DOT) fr[/email] wrote:
Quote:

Sébastien Sénégas a écrit :

Quelqu'un peut il me dire si il est choquant d'avoir un référence en
tant qu'attribut.

e.g.

class B;

class A
{
public:
A( B& b ) : _b( b ) {};
~A() {};

...

private:
B &_b;
}

Perso j'aime pas trop,

Pourqoi cela? Si un objet A doit référencer un objet B et que cette
référence doit rester constante durant toute la durée de vie de
l'objet A, c'est la solution idéale il me semble. Qu'est ce qui te
choque là dedans exactement?


mais j'ai certains collégues qui utilisent ça
sans sourciller, j'aimerais des arguments clairs justifiant s'il s'agit
d'une bonne manière ou d'une mauvaise habitude.

Pour moi il n'y a aucun souçi si on s'assure extérieurement que
l'objet B vit au moins aussi longtemps que l'objet A (mais on aurait le
même problème avec un pointeur).

Arnaud
MVP - VC


Comment se fait-il alors qu'on ne retrouve jamais ce genre d'utilisation
des références dans la littérature, y a t'il une explication à cela?

Back to top
adebaene@club-internet.fr
Guest





PostPosted: Wed Jul 27, 2005 2:38 pm    Post subject: Re: Usage des réferences en tant qu'attribut Reply with quote


Sébastien Sénégas a écrit :

Quote:

Comment se fait-il alors qu'on ne retrouve jamais ce genre d'utilisation
des références dans la littérature, y a t'il une explication àcela?

Ben, moi je le vois régulièrement... Par exemple tous les objets qui
implémentent l'idiome RAII (les "lockers" sur un mutex ou une section
critique, les "libérateurs de ressources" de tout poil, etc...) ont
généralement une référence sur la ressource qu'ils doivent libérer
dans leur destructeur.

Arnaud


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu Jul 28, 2005 7:58 am    Post subject: Re: Usage des réferences en tant qu'attribut Reply with quote

Sébastien Sénégas wrote:
Quote:
Quelqu'un peut il me dire si il est choquant d'avoir un
référence en tant qu'attribut.

e.g.

class B;

class A
{
public:
A( B& b ) : _b( b ) {};
~A() {};

...

private:
B &_b;
}

Perso j'aime pas trop, mais j'ai certains collégues qui
utilisent ça sans sourciller, j'aimerais des arguments clairs
justifiant s'il s'agit d'une bonne manière ou d'une mauvaise
habitude.

Comme souvent, tout dépend. Je m'en sers volentier dans des
classes entité, qui ne supporte ni la copie, ni surtout
l'affectation. En revanche, je l'évite dans les classes de
valeur, ou les agents pour la STL (genre Predicate, BinOp,
etc.). Précisement parce qu'avec une référence, on a un petit
problème à définir l'affectation. Il y a des exceptions,
évidemment, où l'attribute implémentée par la référence n'entre
pas en ligne de compte dans l'affectation, mais elles ne sont
pas particulièrement fréquentes. Dans de tels cas, j'ai souvent
quelque chose du genre :

class C
{
public :
C( B& b ) : myB( &b ) {}

private:
B* myB ;
} ;

La référence comme paramètre du constructeur dit bien que je ne
veux pas de pointeur nul. En revanche, le pointeur comme
attribute fait que je peux avoir un opérateur d'affectation.
(J'ai souvent ce genre de chose dans les objets fonctionnels
pour la STL. Dans ces cas-là, si la classe est définie dans
l'espace référentiel anonyme dans le fichier source, ce qui est
souvent le cas, j'utilise même l'opérateur d'affectation par
défaut que me donne le compilateur.)

Je suppose que quand vos collègues s'en sont servi, ils ont bien
documenté que la classe ne supportait pas l'affectation, ou
qu'elle avait une sémantique d'affectation particulière. Sinon,
je dirais que c'est simplement une erreur.

--
James Kanze GABI Software
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
Sébastien Sénégas
Guest





PostPosted: Thu Jul 28, 2005 3:31 pm    Post subject: Re: Usage des réferences en tant qu'attribut Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:
Quote:
Sébastien Sénégas wrote:

Quelqu'un peut il me dire si il est choquant d'avoir un
référence en tant qu'attribut.


e.g.


class B;


class A
{
public:
A( B& b ) : _b( b ) {};
~A() {};

...


private:
B &_b;
}


Perso j'aime pas trop, mais j'ai certains collégues qui
utilisent ça sans sourciller, j'aimerais des arguments clairs
justifiant s'il s'agit d'une bonne manière ou d'une mauvaise
habitude.


Comme souvent, tout dépend. Je m'en sers volentier dans des
classes entité, qui ne supporte ni la copie, ni surtout
l'affectation. En revanche, je l'évite dans les classes de
valeur, ou les agents pour la STL (genre Predicate, BinOp,
etc.). Précisement parce qu'avec une référence, on a un petit
problème à définir l'affectation. Il y a des exceptions,
évidemment, où l'attribute implémentée par la référence n'entre
pas en ligne de compte dans l'affectation, mais elles ne sont
pas particulièrement fréquentes. Dans de tels cas, j'ai souvent
quelque chose du genre :

class C
{
public :
C( B& b ) : myB( &b ) {}

private:
B* myB ;
} ;

La référence comme paramètre du constructeur dit bien que je ne
veux pas de pointeur nul. En revanche, le pointeur comme
attribute fait que je peux avoir un opérateur d'affectation.
(J'ai souvent ce genre de chose dans les objets fonctionnels
pour la STL. Dans ces cas-là, si la classe est définie dans
l'espace référentiel anonyme dans le fichier source, ce qui est
souvent le cas, j'utilise même l'opérateur d'affectation par
défaut que me donne le compilateur.)

Je suppose que quand vos collègues s'en sont servi, ils ont bien
documenté que la classe ne supportait pas l'affectation, ou
qu'elle avait une sémantique d'affectation particulière. Sinon,
je dirais que c'est simplement une erreur.

--
James Kanze GABI Software
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

merci pour votre réponse Wink


Back to top
James Kanze
Guest





PostPosted: Sat Jul 30, 2005 7:05 am    Post subject: Re: Usage des réferences en tant qu'attribut Reply with quote


[email]adebaene (AT) club-internet (DOT) fr[/email] wrote:
Quote:
Sébastien Sénégas a écrit :

Comment se fait-il alors qu'on ne retrouve jamais ce genre
d'utilisation des références dans la littérature, y a t'il une
explication à cela?

Ben, moi je le vois régulièrement... Par exemple tous les
objets qui implémentent l'idiome RAII (les "lockers" sur un
mutex ou une section critique, les "libérateurs de ressources"
de tout poil, etc...) ont généralement une référence sur la
ressource qu'ils doivent libérer dans leur destructeur.

Tout à fait. Comme ils ont tous aussi des constructeurs de copie
et les opérateurs d'affectation privés.

Comme j'ai expliqué dans une autre réponse, tout dépend de
l'objet. La clé, c'est si l'objet doit ou non supporter
l'affectation ; l'implémentation de l'affectation quand il y a
des références n'est pas sans problèmes.

--
James Kanze mailto: [email]james.kanze (AT) free (DOT) fr[/email]
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre 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.