On Tue, 16 Jan 2007 08:21:06 +0100, Dominique MICOLLET :
Subject: Vecteur de références
Attention, un vecteur est un objet mathématique n'ayant pas grand-chose à voir avec std::vector<>.
vector<A&> truc ;
Pour mettre un objet dans une collection STL (vector, list, etc.), il faut que cet objet soit copiable.
Tu peux créer une collection de pointeurs, car un pointeur est un objet à part entière.
Une référence est grosso modo un pointeur qui pointe toujours sur la même variable. Ce n'est pas un objet en soi, et on ne peut pas l'assigner.
Loïc Joly
Est à dire qu'on ne peut pas faire de vecteur de références ? Si c'est le cas, je ne comprends pas bien pourquoi.
Effectivement. Les éléments à l'intérieur d'un vector doivent répondre à certains critères, dont celui d'être assignable. C'est à dire qu'on doit pouvoir écrire : T t1; T t2; t2 = t1;
Et on ne peut pas faire ça si T est un type référence.
-- Loïc
Est à dire qu'on ne peut pas faire de vecteur de références ?
Si c'est le cas, je ne comprends pas bien pourquoi.
Effectivement. Les éléments à l'intérieur d'un vector doivent répondre à
certains critères, dont celui d'être assignable. C'est à dire qu'on doit
pouvoir écrire :
T t1;
T t2;
t2 = t1;
Et on ne peut pas faire ça si T est un type référence.
Est à dire qu'on ne peut pas faire de vecteur de références ? Si c'est le cas, je ne comprends pas bien pourquoi.
Effectivement. Les éléments à l'intérieur d'un vector doivent répondre à certains critères, dont celui d'être assignable. C'est à dire qu'on doit pouvoir écrire : T t1; T t2; t2 = t1;
Et on ne peut pas faire ça si T est un type référence.
-- Loïc
James Kanze
Fabien LE LEZ wrote:
On Tue, 16 Jan 2007 08:21:06 +0100, Dominique MICOLLET :
[...]
vector<A&> truc ;
Pour mettre un objet dans une collection STL (vector, list, etc.), il faut que cet objet soit copiable.
Et qu'il soit affectable. Une référence peut être copiée, mais l'affectation ne touche pas la référence, mais le référencé.
Tu peux créer une collection de pointeurs, car un pointeur est un objet à part entière.
Une référence est grosso modo un pointeur qui pointe toujours sur la même variable. Ce n'est pas un objet en soi, et on ne peut pas l'assigner.
Puisque tu lui a corrigé l'utilisation du mot vecteur, je me permettrai de signaler qu'en français, le mot est « affecter », et non « assigner ».
-- James Kanze (GABI Software) email: 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
Fabien LE LEZ wrote:
On Tue, 16 Jan 2007 08:21:06 +0100, Dominique MICOLLET :
[...]
vector<A&> truc ;
Pour mettre un objet dans une collection STL (vector, list, etc.), il
faut que cet objet soit copiable.
Et qu'il soit affectable. Une référence peut être copiée, mais
l'affectation ne touche pas la référence, mais le référencé.
Tu peux créer une collection de pointeurs, car un pointeur est un
objet à part entière.
Une référence est grosso modo un pointeur qui pointe toujours sur la
même variable. Ce n'est pas un objet en soi, et on ne peut pas
l'assigner.
Puisque tu lui a corrigé l'utilisation du mot vecteur, je me
permettrai de signaler qu'en français, le mot est
« affecter », et non « assigner ».
--
James Kanze (GABI Software) email:james.kanze@gmail.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
On Tue, 16 Jan 2007 08:21:06 +0100, Dominique MICOLLET :
[...]
vector<A&> truc ;
Pour mettre un objet dans une collection STL (vector, list, etc.), il faut que cet objet soit copiable.
Et qu'il soit affectable. Une référence peut être copiée, mais l'affectation ne touche pas la référence, mais le référencé.
Tu peux créer une collection de pointeurs, car un pointeur est un objet à part entière.
Une référence est grosso modo un pointeur qui pointe toujours sur la même variable. Ce n'est pas un objet en soi, et on ne peut pas l'assigner.
Puisque tu lui a corrigé l'utilisation du mot vecteur, je me permettrai de signaler qu'en français, le mot est « affecter », et non « assigner ».
-- James Kanze (GABI Software) email: 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
James Kanze
Loïc Joly wrote:
Est à dire qu'on ne peut pas faire de vecteur de références ? Si c'est le cas, je ne comprends pas bien pourquoi.
Effectivement. Les éléments à l'intérieur d'un vector doivent r épondre à certains critères, dont celui d'être assignable. C'est à dire qu'on doit pouvoir écrire : T t1; T t2; t2 = t1;
Et on ne peut pas faire ça si T est un type référence.
Bien sûr que si. Seulement, la sémantique n'en convient pas. (Disons que la véritable problème, c'est que la sémantique de copie est radicalement différente que la sémantique de l'affectation.)
Il y a aussi le petit détail que les fonctions de std::vector prend leurs paramètres de type T par référence, et qu'on ne peut pas avoir une référence à une référence.
-- James Kanze (GABI Software) email: 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
Loïc Joly wrote:
Est à dire qu'on ne peut pas faire de vecteur de références ?
Si c'est le cas, je ne comprends pas bien pourquoi.
Effectivement. Les éléments à l'intérieur d'un vector doivent r épondre à
certains critères, dont celui d'être assignable. C'est à dire qu'on doit
pouvoir écrire :
T t1;
T t2;
t2 = t1;
Et on ne peut pas faire ça si T est un type référence.
Bien sûr que si. Seulement, la sémantique n'en convient pas.
(Disons que la véritable problème, c'est que la sémantique de
copie est radicalement différente que la sémantique de
l'affectation.)
Il y a aussi le petit détail que les fonctions de std::vector
prend leurs paramètres de type T par référence, et qu'on ne peut
pas avoir une référence à une référence.
--
James Kanze (GABI Software) email:james.kanze@gmail.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
Est à dire qu'on ne peut pas faire de vecteur de références ? Si c'est le cas, je ne comprends pas bien pourquoi.
Effectivement. Les éléments à l'intérieur d'un vector doivent r épondre à certains critères, dont celui d'être assignable. C'est à dire qu'on doit pouvoir écrire : T t1; T t2; t2 = t1;
Et on ne peut pas faire ça si T est un type référence.
Bien sûr que si. Seulement, la sémantique n'en convient pas. (Disons que la véritable problème, c'est que la sémantique de copie est radicalement différente que la sémantique de l'affectation.)
Il y a aussi le petit détail que les fonctions de std::vector prend leurs paramètres de type T par référence, et qu'on ne peut pas avoir une référence à une référence.
-- James Kanze (GABI Software) email: 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
Dominique MICOLLET
Dominique MICOLLET wrote:
Est à dire qu'on ne peut pas faire de vecteur de références ?
OK
Merci pour vos explications.
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
Incidemment comment traduisez-vous vector dans ce contexte ?
-- Cordialement
Dominique MICOLLET Email : enlever deux fr Universite de Bourgogne 9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27 21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69
Dominique MICOLLET wrote:
Est à dire qu'on ne peut pas faire de vecteur de références ?
OK
Merci pour vos explications.
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
Incidemment comment traduisez-vous vector dans ce contexte ?
--
Cordialement
Dominique MICOLLET Email : enlever deux fr
Universite de Bourgogne
9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69
Est à dire qu'on ne peut pas faire de vecteur de références ?
OK
Merci pour vos explications.
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
Incidemment comment traduisez-vous vector dans ce contexte ?
-- Cordialement
Dominique MICOLLET Email : enlever deux fr Universite de Bourgogne 9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27 21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69
Fabien LE LEZ
On Tue, 16 Jan 2007 10:51:17 +0100, Dominique MICOLLET :
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
Note qu'on se retrouve rarement avec un vector<> nu "dans la nature". Bien souvent, on l'encapsule dans une classe, qui offre une interface correspondant mieux aux besoins.
Rien ne t'empêche alors d'utiliser des références dans l'interface, et des pointeurs dans la cuisine interne de la classe.
Incidemment comment traduisez-vous vector dans ce contexte ?
Perso, je suis contre la traduction. J'appelle "vector" un objet déclaré par "std::vector<..." ; j'appelle "template" une construction introduite par le mot-clé "template", etc.
Mais c'est peut-être un travers qui vient du fait que je n'ai jamais appris la programmation objet en-dehors du C++. C'est aussi pour ça que je n'emploie jamais le mot "méthode" (sauf bien sûr pour désigner un moyen d'obtenir un résultat donné).
On Tue, 16 Jan 2007 10:51:17 +0100, Dominique MICOLLET :
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
Note qu'on se retrouve rarement avec un vector<> nu "dans la nature".
Bien souvent, on l'encapsule dans une classe, qui offre une interface
correspondant mieux aux besoins.
Rien ne t'empêche alors d'utiliser des références dans l'interface, et
des pointeurs dans la cuisine interne de la classe.
Incidemment comment traduisez-vous vector dans ce contexte ?
Perso, je suis contre la traduction. J'appelle "vector" un objet
déclaré par "std::vector<..." ; j'appelle "template" une construction
introduite par le mot-clé "template", etc.
Mais c'est peut-être un travers qui vient du fait que je n'ai jamais
appris la programmation objet en-dehors du C++. C'est aussi pour ça
que je n'emploie jamais le mot "méthode" (sauf bien sûr pour désigner
un moyen d'obtenir un résultat donné).
On Tue, 16 Jan 2007 10:51:17 +0100, Dominique MICOLLET :
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
Note qu'on se retrouve rarement avec un vector<> nu "dans la nature". Bien souvent, on l'encapsule dans une classe, qui offre une interface correspondant mieux aux besoins.
Rien ne t'empêche alors d'utiliser des références dans l'interface, et des pointeurs dans la cuisine interne de la classe.
Incidemment comment traduisez-vous vector dans ce contexte ?
Perso, je suis contre la traduction. J'appelle "vector" un objet déclaré par "std::vector<..." ; j'appelle "template" une construction introduite par le mot-clé "template", etc.
Mais c'est peut-être un travers qui vient du fait que je n'ai jamais appris la programmation objet en-dehors du C++. C'est aussi pour ça que je n'emploie jamais le mot "méthode" (sauf bien sûr pour désigner un moyen d'obtenir un résultat donné).
AlexSoft
bonjour dominique,
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
dans ton cas (tableau d'un type polymorphe) si tu veux les références, je suppose que c'est pour éviter les pbs de libération mémoire, de copie multiple, etc... Alors un pointeur intelligent me semble très efficace, s'il est bien écrit (je crois que boost::shared_ptr convient ici, moi je ne m'en sers pas j'utilise le mien), il est copiable et donc utilisable par std::vector (ainsi que les autres conteneurs...) mais utilisant en interne un "vrai" pointeur, et surchargeant l'opérateur ->, on peut l'utiliser "comme" un pointeur.
Incidemment comment traduisez-vous vector dans ce contexte ? moi, par "tableau", puisque c'est l'utilisation que j'en fait.
-- Cordialement
Dominique MICOLLET Email : enlever deux fr Universite de Bourgogne 9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
cordialement itou Alexandre Guidet IUT de DIJON
bonjour dominique,
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
dans ton cas (tableau d'un type polymorphe) si tu veux les références, je
suppose que c'est pour éviter les pbs de libération mémoire, de copie
multiple, etc... Alors un pointeur intelligent me semble très efficace, s'il
est bien écrit (je crois que boost::shared_ptr convient ici, moi je ne m'en
sers pas j'utilise le mien), il est copiable et donc utilisable par
std::vector (ainsi que les autres conteneurs...) mais utilisant en interne
un "vrai" pointeur, et surchargeant l'opérateur ->, on peut l'utiliser
"comme" un pointeur.
Incidemment comment traduisez-vous vector dans ce contexte ?
moi, par "tableau", puisque c'est l'utilisation que j'en fait.
--
Cordialement
Dominique MICOLLET Email : enlever deux fr
Universite de Bourgogne
9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
dans ton cas (tableau d'un type polymorphe) si tu veux les références, je suppose que c'est pour éviter les pbs de libération mémoire, de copie multiple, etc... Alors un pointeur intelligent me semble très efficace, s'il est bien écrit (je crois que boost::shared_ptr convient ici, moi je ne m'en sers pas j'utilise le mien), il est copiable et donc utilisable par std::vector (ainsi que les autres conteneurs...) mais utilisant en interne un "vrai" pointeur, et surchargeant l'opérateur ->, on peut l'utiliser "comme" un pointeur.
Incidemment comment traduisez-vous vector dans ce contexte ? moi, par "tableau", puisque c'est l'utilisation que j'en fait.
-- Cordialement
Dominique MICOLLET Email : enlever deux fr Universite de Bourgogne 9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
cordialement itou Alexandre Guidet IUT de DIJON
Dominique MICOLLET
AlexSoft wrote:
bonjour dominique,
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
dans ton cas (tableau d'un type polymorphe) si tu veux les références, je suppose que c'est pour éviter les pbs de libération mémoire, de copie multiple, etc...
Oui :-)
Je n'aime pas programmer comme un cochon...
Alors un pointeur intelligent me semble très efficace, Il faut que je regarde cela.
Pour le moment, je nettoie correctement les pointeurs dans le destructeur.
-- Cordialement
Dominique MICOLLET Email : enlever deux fr Universite de Bourgogne 9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27 21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69
AlexSoft wrote:
bonjour dominique,
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
dans ton cas (tableau d'un type polymorphe) si tu veux les références, je
suppose que c'est pour éviter les pbs de libération mémoire, de copie
multiple, etc...
Oui :-)
Je n'aime pas programmer comme un cochon...
Alors un pointeur intelligent me semble très efficace,
Il faut que je regarde cela.
Pour le moment, je nettoie correctement les pointeurs dans le destructeur.
--
Cordialement
Dominique MICOLLET Email : enlever deux fr
Universite de Bourgogne
9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69
Je vais donc en rester à mon vecteur de pointeurs. Snif :-(
dans ton cas (tableau d'un type polymorphe) si tu veux les références, je suppose que c'est pour éviter les pbs de libération mémoire, de copie multiple, etc...
Oui :-)
Je n'aime pas programmer comme un cochon...
Alors un pointeur intelligent me semble très efficace, Il faut que je regarde cela.
Pour le moment, je nettoie correctement les pointeurs dans le destructeur.
-- Cordialement
Dominique MICOLLET Email : enlever deux fr Universite de Bourgogne 9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27 21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69
Fabien LE LEZ
On Wed, 17 Jan 2007 16:48:54 +0100, Dominique MICOLLET :
Pour le moment, je nettoie correctement les pointeurs dans le destructeur.
Si c'est là le problème, je ne vois pas bien quel avantage tu comptais obtenir de l'usage de références.
Au fait, es-tu sûr de ne pas pouvoir mettre carrément les objets dans ton vector ? Quitte à le transformer en list si ça s'avère nécessaire.
On Wed, 17 Jan 2007 16:48:54 +0100, Dominique MICOLLET :
Pour le moment, je nettoie correctement les pointeurs dans le destructeur.
Si c'est là le problème, je ne vois pas bien quel avantage tu comptais
obtenir de l'usage de références.
Au fait, es-tu sûr de ne pas pouvoir mettre carrément les objets dans
ton vector ? Quitte à le transformer en list si ça s'avère nécessaire.