dans l'article , Fabien LE LEZ à a écrit le 12/08/05 11:52 :
On Fri, 12 Aug 2005 11:15:50 +0200, Bruno CAUSSE :
En passant, si cette adresse n'est pas correcte, merci de rajouter ".invalid" à la fin.
Je le note.
/* pointeur pour pouvoir intervertir premier et deuxieme rapidement c.a.d. Sans recopie d'objet; */
A* premier; A* deuxieme;
C'est un peu une bombe nucléaire pour tuer une mouche. Tu fais là de l'optimisation précoce : tu compliques le code dans l'espoir que ton programme aille plus vite, mais sans savoir à l'avance s'il y a réellement un problème de vitesse. Si ça se trouve, tes bidouillages ralentiront le programme.
Evidement A n'est pas si simple. Et je peux en intervertir + de 100 000 par seconde.
Donc, ton code me paraît incorrect pour deux raisons :
- comme il y a des pointeurs et de l'allocation dynamique, tu dois rajouter un construteur de copie et un opérateur de copie -- en l'état, ça plantera à la première copie.
Oui,
- ton code est inutilement compliqué, et je considère ça comme une erreur de programmation.
Peut on fixer ("const") la taille d'un vecteur. Aucun retrait ou ajout?
J'ai du mal à comprendre ta terminologie. Parles-tu ici d'un tableau (std::vector<>),
Oui, desolé
ou d'un vecteur, i.e. objet mathématique, élément d'un espace vectoriel, représenté généralement par un tableau de taille fixe ?
non, donc
Si tu veux un tableau de taille fixe connue à la compilation, un tableau "à la C" convient : static size_t const taille_tableau= 42; int tableau [taille_tableau];
Justement je passe aux vector (1ere ligne de mon 1er post);-)
Si tu veux un tableau de taille fixée dans le constructeur, ce n'est pas très difficile à programmer :
Note : il manque quelques trucs, comme les reverse_iterator, mais tu peux les rajouter au fur et à mesure de tes besoins.
dans l'article 2orof11k2ps97nghtkf26qk197827b1cot@4ax.com, Fabien LE LEZ à
gramster@gramster.com a écrit le 12/08/05 11:52 :
On Fri, 12 Aug 2005 11:15:50 +0200, Bruno CAUSSE <envoi@lesSpam.fr>:
En passant, si cette adresse n'est pas correcte, merci de rajouter
".invalid" à la fin.
Je le note.
/* pointeur pour pouvoir intervertir premier et deuxieme rapidement c.a.d.
Sans recopie d'objet; */
A* premier;
A* deuxieme;
C'est un peu une bombe nucléaire pour tuer une mouche.
Tu fais là de l'optimisation précoce : tu compliques le code dans
l'espoir que ton programme aille plus vite, mais sans savoir à
l'avance s'il y a réellement un problème de vitesse.
Si ça se trouve, tes bidouillages ralentiront le programme.
Evidement A n'est pas si simple. Et je peux en intervertir + de 100 000 par
seconde.
Donc, ton code me paraît incorrect pour deux raisons :
- comme il y a des pointeurs et de l'allocation dynamique, tu dois
rajouter un construteur de copie et un opérateur de copie -- en
l'état, ça plantera à la première copie.
Oui,
- ton code est inutilement compliqué, et je considère ça comme une
erreur de programmation.
Peut on fixer ("const") la taille d'un vecteur. Aucun retrait ou ajout?
J'ai du mal à comprendre ta terminologie. Parles-tu ici d'un tableau
(std::vector<>),
Oui, desolé
ou d'un vecteur, i.e. objet mathématique, élément
d'un espace vectoriel, représenté généralement par un tableau de
taille fixe ?
non, donc
Si tu veux un tableau de taille fixe connue à la compilation, un
tableau "à la C" convient :
static size_t const taille_tableau= 42;
int tableau [taille_tableau];
Justement je passe aux vector (1ere ligne de mon 1er post);-)
Si tu veux un tableau de taille fixée dans le constructeur, ce n'est
pas très difficile à programmer :
dans l'article , Fabien LE LEZ à a écrit le 12/08/05 11:52 :
On Fri, 12 Aug 2005 11:15:50 +0200, Bruno CAUSSE :
En passant, si cette adresse n'est pas correcte, merci de rajouter ".invalid" à la fin.
Je le note.
/* pointeur pour pouvoir intervertir premier et deuxieme rapidement c.a.d. Sans recopie d'objet; */
A* premier; A* deuxieme;
C'est un peu une bombe nucléaire pour tuer une mouche. Tu fais là de l'optimisation précoce : tu compliques le code dans l'espoir que ton programme aille plus vite, mais sans savoir à l'avance s'il y a réellement un problème de vitesse. Si ça se trouve, tes bidouillages ralentiront le programme.
Evidement A n'est pas si simple. Et je peux en intervertir + de 100 000 par seconde.
Donc, ton code me paraît incorrect pour deux raisons :
- comme il y a des pointeurs et de l'allocation dynamique, tu dois rajouter un construteur de copie et un opérateur de copie -- en l'état, ça plantera à la première copie.
Oui,
- ton code est inutilement compliqué, et je considère ça comme une erreur de programmation.
Peut on fixer ("const") la taille d'un vecteur. Aucun retrait ou ajout?
J'ai du mal à comprendre ta terminologie. Parles-tu ici d'un tableau (std::vector<>),
Oui, desolé
ou d'un vecteur, i.e. objet mathématique, élément d'un espace vectoriel, représenté généralement par un tableau de taille fixe ?
non, donc
Si tu veux un tableau de taille fixe connue à la compilation, un tableau "à la C" convient : static size_t const taille_tableau= 42; int tableau [taille_tableau];
Justement je passe aux vector (1ere ligne de mon 1er post);-)
Si tu veux un tableau de taille fixée dans le constructeur, ce n'est pas très difficile à programmer :
Note : il manque quelques trucs, comme les reverse_iterator, mais tu peux les rajouter au fur et à mesure de tes besoins.
Fabien LE LEZ
On Fri, 12 Aug 2005 11:59:48 +0200, Bruno CAUSSE :
Evidement A n'est pas si simple. Et je peux en intervertir + de 100 000 par seconde.
Ça ne change rien à mon raisonnement.
Est-ce que que A est copiable ? Si oui, il faut utiliser la méthode la plus simple : B contient deux objets de classe A. Si à l'exécution on se rend compte que c'est trop lent, et si le profiler indique que c'est à cause de ça, alors on peut utiliser une autre méthode. A priori, le deuxième essai sera avec boost::shared_ptr.
Si tu veux un tableau de taille fixe connue à la compilation, un tableau "à la C" convient : static size_t const taille_tableau= 42; int tableau [taille_tableau];
Justement je passe aux vector (1ere ligne de mon 1er post)
On ne "passe" pas aux std::vector<>. Ce n'est pas une religion. On utilise std::vector<> quand c'est cette méthode qui convient, et on utilise une autre méthode sinon.
On Fri, 12 Aug 2005 11:59:48 +0200, Bruno CAUSSE <envoi@lesSpam.fr>:
Evidement A n'est pas si simple. Et je peux en intervertir + de 100 000 par
seconde.
Ça ne change rien à mon raisonnement.
Est-ce que que A est copiable ?
Si oui, il faut utiliser la méthode la plus simple : B contient deux
objets de classe A.
Si à l'exécution on se rend compte que c'est trop lent, et si le
profiler indique que c'est à cause de ça, alors on peut utiliser une
autre méthode. A priori, le deuxième essai sera avec
boost::shared_ptr.
Si tu veux un tableau de taille fixe connue à la compilation, un
tableau "à la C" convient :
static size_t const taille_tableau= 42;
int tableau [taille_tableau];
Justement je passe aux vector (1ere ligne de mon 1er post)
On ne "passe" pas aux std::vector<>. Ce n'est pas une religion. On
utilise std::vector<> quand c'est cette méthode qui convient, et on
utilise une autre méthode sinon.
On Fri, 12 Aug 2005 11:59:48 +0200, Bruno CAUSSE :
Evidement A n'est pas si simple. Et je peux en intervertir + de 100 000 par seconde.
Ça ne change rien à mon raisonnement.
Est-ce que que A est copiable ? Si oui, il faut utiliser la méthode la plus simple : B contient deux objets de classe A. Si à l'exécution on se rend compte que c'est trop lent, et si le profiler indique que c'est à cause de ça, alors on peut utiliser une autre méthode. A priori, le deuxième essai sera avec boost::shared_ptr.
Si tu veux un tableau de taille fixe connue à la compilation, un tableau "à la C" convient : static size_t const taille_tableau= 42; int tableau [taille_tableau];
Justement je passe aux vector (1ere ligne de mon 1er post)
On ne "passe" pas aux std::vector<>. Ce n'est pas une religion. On utilise std::vector<> quand c'est cette méthode qui convient, et on utilise une autre méthode sinon.
Arnaud Meurgues
Bruno CAUSSE wrote:
B(const B& src) {
//cas particulier que des membres primitifs (int) *premier = *(src.premier); *deuxieme = *(src.deuxieme); };
Heu... À quel moment *premier est-il créé ?
-- Arnaud
Bruno CAUSSE wrote:
B(const B& src) {
//cas particulier que des membres primitifs (int)
*premier = *(src.premier);
*deuxieme = *(src.deuxieme);
};
//cas particulier que des membres primitifs (int) *premier = *(src.premier); *deuxieme = *(src.deuxieme); };
Heu... À quel moment *premier est-il créé ?
-- Arnaud
Bruno CAUSSE
dans l'article , Jean-Marc Bourguet à a écrit le 12/08/05 11:53 :
1/ quel est la difference entre *this != src et this != &src
Encore un fois un peu trop vite
*this != src -> compare le contenu? (est ce valide sur A?)
Donc this != &src compare les adresses.
2/ Pourquoi est-ce que le test *this != src est necessaire? (En premiere approximation, si un tel test est necessaire, il y a grande chance que le code soit incorrect en presence d'exceptions)
Explication svp.
dans l'article pxbzmrnmqfp.fsf@news.bourguet.org, Jean-Marc Bourguet à
jm@bourguet.org a écrit le 12/08/05 11:53 :
1/ quel est la difference entre
*this != src
et
this != &src
Encore un fois un peu trop vite
*this != src -> compare le contenu? (est ce valide sur A?)
Donc this != &src compare les adresses.
2/ Pourquoi est-ce que le test
*this != src
est necessaire? (En premiere approximation, si un tel test est
necessaire, il y a grande chance que le code soit incorrect en
presence d'exceptions)
dans l'article , Jean-Marc Bourguet à a écrit le 12/08/05 11:53 :
1/ quel est la difference entre *this != src et this != &src
Encore un fois un peu trop vite
*this != src -> compare le contenu? (est ce valide sur A?)
Donc this != &src compare les adresses.
2/ Pourquoi est-ce que le test *this != src est necessaire? (En premiere approximation, si un tel test est necessaire, il y a grande chance que le code soit incorrect en presence d'exceptions)
Explication svp.
Jean-Marc Bourguet
Bruno CAUSSE writes:
dans l'article , Jean-Marc Bourguet à a écrit le 12/08/05 11:53 :
1/ quel est la difference entre *this != src et this != &src
Encore un fois un peu trop vite
*this != src -> compare le contenu? (est ce valide sur A?)
Les operateurs de comparaisons ne sont pas generes automatiquement par le compilateur. Donc il n'y en a ni pour A ni pour B...
Donc this != &src compare les adresses.
2/ Pourquoi est-ce que le test *this != src est necessaire? (En premiere approximation, si un tel test est necessaire, il y a grande chance que le code soit incorrect en presence d'exceptions)
Explication svp.
Si j'ai bonne memoire, ce doit se trouver ici
http://www.gotw.ca/gotw/023.htm
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Bruno CAUSSE <envoi@lesSpam.fr> writes:
dans l'article pxbzmrnmqfp.fsf@news.bourguet.org, Jean-Marc Bourguet à
jm@bourguet.org a écrit le 12/08/05 11:53 :
1/ quel est la difference entre
*this != src
et
this != &src
Encore un fois un peu trop vite
*this != src -> compare le contenu? (est ce valide sur A?)
Les operateurs de comparaisons ne sont pas generes automatiquement par
le compilateur. Donc il n'y en a ni pour A ni pour B...
Donc this != &src compare les adresses.
2/ Pourquoi est-ce que le test
*this != src
est necessaire? (En premiere approximation, si un tel test est
necessaire, il y a grande chance que le code soit incorrect en
presence d'exceptions)
Explication svp.
Si j'ai bonne memoire, ce doit se trouver ici
http://www.gotw.ca/gotw/023.htm
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
dans l'article , Jean-Marc Bourguet à a écrit le 12/08/05 11:53 :
1/ quel est la difference entre *this != src et this != &src
Encore un fois un peu trop vite
*this != src -> compare le contenu? (est ce valide sur A?)
Les operateurs de comparaisons ne sont pas generes automatiquement par le compilateur. Donc il n'y en a ni pour A ni pour B...
Donc this != &src compare les adresses.
2/ Pourquoi est-ce que le test *this != src est necessaire? (En premiere approximation, si un tel test est necessaire, il y a grande chance que le code soit incorrect en presence d'exceptions)
Explication svp.
Si j'ai bonne memoire, ce doit se trouver ici
http://www.gotw.ca/gotw/023.htm
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org