OVH Cloud OVH Cloud

Supression d'un élément d'une map

35 réponses
Avatar
Michaël Delva
Bonsoir à tous,

voici ma question:

j'ai la map suivante:

std::map<AnsiString,DS_Edit_Video*> map;

Je la remplis comme ceci:

map[nom_cle] = new DS_Edit_Video;

Avant de la remplir, je veux la vider de certains éléments:

for (int i=0; i < nbre_joueurs; i++)
{
AnsiString nom_cle = Liste_Joueurs->Items->Strings[i];
it ite = timelines_joueurs.fin(nom_cle);

if (ite != timelines_joueurs.end())
{
delete ite->second;
timelines_joueurs.erase(ite);
}
}

est-ce nécessaire de passer par un delete ite->second, ou bien est-ce que
la ligne qui suit le fait également?

Merci d'avance...

10 réponses

1 2 3 4
Avatar
James Kanze
"Michaël Delva" writes:

|> James Kanze wrote in
|> news::

|> > "Michaël Delva" writes:

|> >|> Fabien LE LEZ wrote in
|> >|> news::

|> >|> > Ce qui conduit à ma question habituelle : es-tu bien
|> >|> > sûr de ne pas pouvoir mettre carrément des objets dans
|> >|> > ta map ?

|> > À vrai dire, je dirais que la question ne se justifie que si on
|> > a au moins une petite idée de la sémantique de l'objet. Dans
|> > mon propre code, je crois que la plupart des map ont des pointeurs
|> > comme deuxième type.

|> On entre dans un domaine qui se complexifie pour moi, notamment du
|> fait de l'utilisation de vocabulaire que je ne connais et comprends
|> pas encore.

Comment fais-tu alors pour faire de la conception ?

|> Qu'est-ce que tu appelles la sémantique d'un objet?

La sémantique d'un objet est l'ensemble de son comportement, qui doit
être déterminé par le rôle de l'objet dans l'application. Un
des aspects de la sémantique à considérer est la distinction
entre une sémantique de valeur et une sémantique de
référence. En gros, on utilise une sémantique de valeur quand
le rôle de l'objet est de réprésenter simplement une valeur
(numérique, chaîne de caractères, etc.) On utilise une
sémantique de référence quand l'identité de l'objet est
importante ; quand une copie n'en ferait pas l'affaire.

C'est évidemment une simplification radicale, mais à titre
d'exemple, considère un virement bancaire qui crédite ton compte
de 100 Euros. Les 100 Euros, c'est une valeur -- qu'on s'en sert de
l'original, ou d'une copie, 100 Euros, c'est 100 Euros. En revanche,
j'imagine que ça ne te plairait pas particulièrement si à la
place de le créditer à ton compte, on l'en créditait à une
copie, qui sera détruite à la fin de l'opération.

Et comme j'ai dit, c'est une simplification. On pourrait très bien
imaginer une application où on faisait une copie des comptes, aussi,
afin de pouvoir gérer des transactions (roll-back en cas d'erreur,
etc.)

En gros, un type qui a une sémantique de valeur supportera la copie
et l'affectation, au moyen d'un constructeur de copie et un opérateur
d'affectation publics (éventuellement fournis par le compilateur) ;
un type qui a une sémantique de référence interdira la copie et
l'affectation, en declarant le constructeur de copie et l'opérateur
d'affectation privés. Dans ce cas-là, il faut que le programmeur
les déclarent, parce que ceux fournis par le compilateur sont
toujours publics. (Il existe aussi des moyens d'interdire au compilateur
de générer les défauts, boost::noncopiable, par exemple. Au
moins d'être dans une position de largement diffuser l'idiome, comme
c'est le cas de Boost, ces moyens rélèvent de l'offuscation.)

[...]

|> Donc il me faut utiliser les pointeurs intelligents de Boost, ça
|> posera pas de problème??

Moins de problèmes. Peut-être. Disons qu'ils ont l'avantage
d'être déjà implémentés, y compris dans les contextes
multi-thread. Mais ils ne résoudent pas le problème des
références cycliques -- ils fournissent bien des outils pour
permettre à résoudre, mais il reste à toi de reconnaître le
problème et d'utiliser les outils à bon échéance. (Dans la
pratique, je n'ai pas vu beaucoup de cas où leur outil --
boost::weak_ptr, avait des avantages sur un pointeur bruts. Sinon que le
fait même de l'utiliser montre au lecteur que tu as considéré
le problème.) Et si Boost offre en fait les deux implémentations
classiques, c'est toujours à toi de choisir laquelle des deux
convient, et de faire attention à en respecter les limites.

Si tu n'as pas le problème des threads, tu pourrais aussi jeter un
coup d'oeil au GB_RefCntPtr chez moi. C'est beaucoup plus simple que
Boost (parce qu'il prétend en faire moins).

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
"Christophe Lephay" writes:

|> Michaël Delva wrote:
|> > James Kanze wrote in
|> > news::
|> >> À vrai dire, je dirais que la question ne se justifie que si
|> >> on a au moins une petite idée de la sémantique de l'objet.
|> >> Dans mon propre code, je crois que la plupart des map ont des
|> >> pointeurs comme deuxième type.

|> > On entre dans un domaine qui se complexifie pour moi, notamment du
|> > fait de l'utilisation de vocabulaire que je ne connais et
|> > comprends pas encore.

|> > Qu'est-ce que tu appelles la sémantique d'un objet?

|> >> En sachant la sémantique de l'objet en question. S'il a une
|> >> sémantique de valeur, on utilise des valeurs ; s'il a une
|> >> sémantique de référence (type d'entité, par exemple),
|> >> on utilise des pointeurs.

|> > Idem, malgré la précision que tu apportes...

|> La notion de valeur a-t-elle une quelconque signification pour tes
|> objets ?

Je dirais que la clé, c'est prèsque l'inverse : si l'identité a
de l'importance pour l'objet, il faut lui donner une sémantique de
référence. Sinon, une sémantique de valeur (au moins qu'il y a
d'autres contraints, comme le polymorphisme). La notion de valeur a bien
une signification pour un compte en banque, par exemple, mais
typiquement, mais je préfère que quand on crédite mon compte,
c'est bien mon compte, et non une copie temporaire, qui serait
crédité.

Dans l'OO classique, on parle aussi parfois des attributes.
L'application se définit en termes d'objets d'« entité »,
qui ont bien une identité, sont souvent polymorphique, etc. L'état
de ces objets est défini par des attributes -- les membres donnés
à sémantique de valeur.

|> Si oui, en général, il est possible de les copier, de leur
|> affecter une autre valeur. Deux objets peuvent être
|> considérés comme identiques si ils possèdent la même
|> valeur.

Je crois que c'est là la clé : ominpotence (ou la
substituabilité) de tous les objets qui se comparent égal.

|> Dans le cas contraire, les objets ne sont pas caractérisés par
|> une valeur, mais par une identité. Cette identité est
|> caractérisée par un ID qui peut être une clé primaire
|> dans une base de données, un identifiant unique quelconque, ou
|> plus simplement l'adresse mémoire de l'objet dans le cas d'objets
|> volatiles (ou non persistents, qui ne survivent pas après la fin
|> de l'exécution du programme).

Bonne précision en ce qui concerne l'id. Quand je fais une copie d'un
objet à identité dans la contexte d'une transaction, par exemple,
la copie a la même identité. Aussi important, je ne travaille
réelement qu'avec un des objets -- ou bien la copie, ou bien
l'original, et à la fin de la transaction, selon que je commets ou
que j'abandonne la transaction, je n'en garde qu'un.

|> En général, les objets avec une sémantique de valeur
|> offrent moins de contraintes et sont donc plus faciles à
|> utiliser.

Et c'est là où je me sépare de toi. Il n'y a pas un qui offre
moins de contraintes et qui est plus facile à utiliser. Ils jouent
des rôles radicalement différents dans l'application, et ne sont
pas substituable. Si on a besoin d'une sémantique de référence,
essayer d'utiliser une sémantique de valeur ne marche pas, et vice
versa. Une des « erreurs » la plus fréquentes que je vois,
c'est l'omission des l'interdiction de copie des objets dont
l'application exige l'identité.

Ce dont il faut bien se rendre compte, quand même, c'est que chaque
langage a ces propres idiomes, plus ou moins consacré, pour
implémenter ces deux sémantiques. Et que l'idiome de valeur en
C++, c'est bien la copie (profonde) de l'objet, et non le pointeur.
Typiquement, c'est même très rare qu'on soit amené à allouer
dynamiquement un objet à sémantique de valeur.
(L'implémentation des objets à sémantique de valeur peut
très bien utiliser la mémoire dynamique, quand par exemple la
taille ou la structure de l'objet peut varier dynamiquement. Mais à
ce moment-là, c'est un détail de l'implémentation de l'objet.)

[...]
|> >> En première approximation, parce qu'on peut être amené à
|> >> utiliser des pointeurs pour d'autres raisons aussi, et dans certains
|> >> cas, c'est intéressant d'emballer un type d'entité dans un
|> >> envellope dont les valeurs ont une sémantique de référence.

|> Je grouve que la phrase de James n'est pas très claire. Je crois
|> qu'il veut dire qu'il y a des cas où tu utilises des pointeurs
|> sans vouloir pour autant une sémantique d'identité (ou de
|> référence). C'est notemment le cas en C++ quand tu utilises
|> des objets polymorphes, ce qui n'est possible que via leur adresse
|> (à travers un pointeur ou une référence).

Oui, ou quand la copie est vraiment trop chère -- même si
l'application donne une sémantique de valeur à un tableau d'une
million de chaînes de caractères, il y a de fortes chances que je
le manipule avec des pointeurs.

|> Quand tu es obligé d'utiliser des pointeurs et que tu souhaites
|> que tes objets conservent une sémantique de valeur (supportent
|> librement la copie ou l'affectation), il faut fournir un travail
|> supplémentaire en les encapsulant dans une classe qui définit
|> ces opérations.

Oui, ou si on est paresseux, on se passe de l'encapsulation, et on se
sert des pointeurs intelligents directement. (Ça m'est arrivé plus
d'une fois.)

|> >>>> Pour info, DS_Edit_Video* est une classe me permettant de
|> >>>> gérer une édition vidéo avec DirectShow.

|> Connais pas...

|> Ceci dit, vu la quantité de données impliquée dans
|> l'édition vidéo, je doute qu'il soit souhaitable de les copier
|> fréquemment, ce qui rend l'utilité d'une sémantique de
|> valeur peu probable.

D'une part. De l'autre, vue le mot « édit » dans le nom,
j'imagine que l'objet a un état interne qui évolue, et qu'on veut
garder ces évolutions. Ce qui suppose une certaine identité.

Sans que ce soit une règle absolue, je trouve que la plupart du
temps, les seules fonctions non-const d'un objet à sémantique de
valeur doivent être les opérateurs d'affectation. (C'était le
cas de mes premières classes de chaînes de caractère, par
exemple.)

|> La question restante concerne la durée de vie de ces objets. Si
|> tu sais à quel moment ils sont créés et à quels moments
|> ils sont détruits, le plus simple consiste à les utiliser
|> comme tu le fais, via des pointeurs. Dans le cas contraire, des
|> pointeurs intelligents sont un plus, notemment avec un comptage de
|> références dans le cas de références multiples.

En fait, si l'objet a une identité, et tu ne sais pas à quel
moment il faut la détruire, je crois que tu as un problème
déjà. En revanche, ce n'est pas rare d'utiliser une collection
pour la gestion de la durée de vie -- tous les objets d'un certain
type doivent se trouver dans une collection donnée, et on supprime
l'objet en l'enlevant de la collection. Et il n'est aussi pas rare qu'il
faut une ou deux opérations de nettoyage après l'avoir enlevé
de la collection. Dans ce cas-là, des pointeurs intelligents sont
tout à fait indiquer. De même que quand on utiliser une
sémantique de référence pour des raisons autre que pour
maintenir l'identité de l'objet.

|> Pour conclure, c'est juste un petit topo théorique. D'un point de
|> vue pratique, ne changes rien, si ce n'est de ne pas oublier
|> d'effacer tes objets avec delete ; erase ne supprimant que leur
|> référence dans le map, comme il t'a déjà été
|> précisé dans un autre post. Du reste, tu peux peut-être te
|> faire une petite fonction qui fasse les deux...

En général, les collections de la STL sont d'un niveau très
bas, et c'est assez rare de s'en servir directement sans les emballer
dans une classe applicative.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
"Michaël Delva" writes:

[...]
|> est-ce vraiment nécessaire de créer des fonctions pour d'aussi
|> petites instructions?

|> Je m'interroge là dessus... Personnellement je ne le fais jamais,
|> car ça m'oblige à naviguer trop souvent dans le code source
|> pour retrouver leur utilité...

Je crois que tu poses la question en de mauvais termes. La question est
plutôt ce que tu es en trains de faire ici. Est-ce qu'il s'exprime au
moyens d'un prédicat (groupe verbale) clair et simple ? Si oui,
l'encapsuler dans une fonction dont le nom exprime ce prédicat
facilite la lecture du programme, parce que quand je lis le code, je ne
navigue pas dans la fonction -- je vois ce qu'elle fait d'après le
nom.

Sinon, il y a un problème de conception assez grave.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Michaël Delva
James Kanze wrote in
news::

Comment fais-tu alors pour faire de la conception ?


Au fur et à mesure de l'avancement du projet, et de mes connaissances...
C'est l'inconvénient de n'avoir pas été formé et d'avoir appris sur le
tas :-(

|> Qu'est-ce que tu appelles la sémantique d'un objet?

La sémantique d'un objet est l'ensemble de son comportement, qui doit
être déterminé par le rôle de l'objet dans l'application. Un
des aspects de la sémantique à considérer est la distinction
entre une sémantique de valeur et une sémantique de
référence. En gros, on utilise une sémantique de valeur quand
le rôle de l'objet est de réprésenter simplement une valeur
(numérique, chaîne de caractères, etc.) On utilise une
sémantique de référence quand l'identité de l'objet est
importante ; quand une copie n'en ferait pas l'affaire.

C'est évidemment une simplification radicale, mais à titre
d'exemple, considère un virement bancaire qui crédite ton compte
de 100 Euros. Les 100 Euros, c'est une valeur -- qu'on s'en sert de
l'original, ou d'une copie, 100 Euros, c'est 100 Euros. En revanche,
j'imagine que ça ne te plairait pas particulièrement si à la
place de le créditer à ton compte, on l'en créditait à une
copie, qui sera détruite à la fin de l'opération.

Et comme j'ai dit, c'est une simplification. On pourrait très bien
imaginer une application où on faisait une copie des comptes, aussi,
afin de pouvoir gérer des transactions (roll-back en cas d'erreur,
etc.)

En gros, un type qui a une sémantique de valeur supportera la copie
et l'affectation, au moyen d'un constructeur de copie et un opérateur
d'affectation publics (éventuellement fournis par le compilateur) ;
un type qui a une sémantique de référence interdira la copie et
l'affectation, en declarant le constructeur de copie et l'opérateur
d'affectation privés. Dans ce cas-là, il faut que le programmeur
les déclarent, parce que ceux fournis par le compilateur sont
toujours publics. (Il existe aussi des moyens d'interdire au
compilateur de générer les défauts, boost::noncopiable, par exemple.
Au moins d'être dans une position de largement diffuser l'idiome,
comme c'est le cas de Boost, ces moyens rélèvent de l'offuscation.)

[...]


C'est peut-être simplifié, mais au moins j'ai compris

|> Donc il me faut utiliser les pointeurs intelligents de Boost, ça
|> posera pas de problème??

Moins de problèmes. Peut-être. Disons qu'ils ont l'avantage
d'être déjà implémentés, y compris dans les contextes
multi-thread. Mais ils ne résoudent pas le problème des
références cycliques -- ils fournissent bien des outils pour
permettre à résoudre, mais il reste à toi de reconnaître le
problème et d'utiliser les outils à bon échéance. (Dans la
pratique, je n'ai pas vu beaucoup de cas où leur outil --
boost::weak_ptr, avait des avantages sur un pointeur bruts. Sinon que
le fait même de l'utiliser montre au lecteur que tu as considéré
le problème.) Et si Boost offre en fait les deux implémentations
classiques, c'est toujours à toi de choisir laquelle des deux
convient, et de faire attention à en respecter les limites.

Si tu n'as pas le problème des threads, tu pourrais aussi jeter un
coup d'oeil au GB_RefCntPtr chez moi. C'est beaucoup plus simple que
Boost (parce qu'il prétend en faire moins).



Je jetterai un oeil à tout ça bientôt

Merci pour tout!!

Avatar
James Kanze
"Michaël Delva" writes:

|> James Kanze wrote in
|> news::

|> > Comment fais-tu alors pour faire de la conception ?

|> Au fur et à mesure de l'avancement du projet, et de mes
|> connaissances... C'est l'inconvénient de n'avoir pas été
|> formé et d'avoir appris sur le tas :-(

Moi aussi, je me suis formé sur le tas. (Je n'ai pas le niveau bac,
et je n'ai jamais suivi un cour d'informatique.)

Mais c'est un peu pour ça que j'insiste. Typiquement (en supposant
que mon expérience est typique), quand on apprend sur le tas, on
apprend surtout les détails. Or, pour maîtriser l'informatique, il
faut savoir commencer par la conception générale.

Je ne sais pas vraiment ce qu'il faudrait te conseiller. Moi, j'ai
toujours eu de la chance d'avoir un bon collègue au bon moment, pour
me diriger dans la bonne direction. Donc, on m'a conseillé le Booch
(_Object_ _Oriented_ _Design_ _with_ _Applications_, de Grady Booch,
ISBN 0-8053-0091-0), mais j'ai appris beaucoup plus en discussions avec
les collègues de l'époque. Enfin, le seul livre que je connais qui
traite vraiment le développement d'un programme complet en C++, c'est
_Designing_ _Object_ _Oriented_ _C++_ _Applications_ _Using_ _the_
_Booch_ _Method_, de Robert Martin (ISBN 0-13-203837-4). Il est
malheureusement un peu périmé -- notation Booch à la place de
USL, un C++ d'il y a dix ans. Mais à mon avis, ça vaut toujours la
peine.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Michaël Delva
James Kanze wrote in

Moi aussi, je me suis formé sur le tas. (Je n'ai pas le niveau bac,
et je n'ai jamais suivi un cour d'informatique.)


Ce ne serait pas toi qui le dit, je ne l'aurais pas cru ;-)

Mais c'est un peu pour ça que j'insiste. Typiquement (en supposant
que mon expérience est typique), quand on apprend sur le tas, on
apprend surtout les détails. Or, pour maîtriser l'informatique, il
faut savoir commencer par la conception générale.

Je ne sais pas vraiment ce qu'il faudrait te conseiller. Moi, j'ai
toujours eu de la chance d'avoir un bon collègue au bon moment, pour
me diriger dans la bonne direction. Donc, on m'a conseillé le Booch
(_Object_ _Oriented_ _Design_ _with_ _Applications_, de Grady Booch,
ISBN 0-8053-0091-0), mais j'ai appris beaucoup plus en discussions
avec les collègues de l'époque. Enfin, le seul livre que je connais
qui traite vraiment le développement d'un programme complet en C++,
c'est _Designing_ _Object_ _Oriented_ _C++_ _Applications_ _Using_
_the_ _Booch_ _Method_, de Robert Martin (ISBN 0-13-203837-4). Il est
malheureusement un peu périmé -- notation Booch à la place de
USL, un C++ d'il y a dix ans. Mais à mon avis, ça vaut toujours la
peine.



Je vais essayer de trouver ces ouvrages...

Mais quoi qu'il en soit, tu as tout à fait raison, j'apprends énormément
rien qu'en lisant les discussions sur ce groupe...

Avatar
Christophe Lephay
James Kanze wrote:
"Christophe Lephay" writes:
La notion de valeur a-t-elle une quelconque signification pour tes
objets ?



Je dirais que la clé, c'est prèsque l'inverse : si l'identité a
de l'importance pour l'objet, il faut lui donner une sémantique de
référence. Sinon, une sémantique de valeur (au moins qu'il y a
d'autres contraints, comme le polymorphisme).


Néanmoins, je trouve que c'est la question inverse qui se pose dans son cas,
dans la mesure où il accède à ses objets via des pointeurs. Une sémantique
de valeur requiert un travail supplémentaire, une sémantique de référence,
non...

En général, les objets avec une sémantique de valeur
offrent moins de contraintes et sont donc plus faciles à
utiliser.



Et c'est là où je me sépare de toi. Il n'y a pas un qui offre
moins de contraintes et qui est plus facile à utiliser.
...

Ce dont il faut bien se rendre compte, quand même, c'est que chaque
langage a ces propres idiomes, plus ou moins consacré, pour
implémenter ces deux sémantiques. Et que l'idiome de valeur en
C++, c'est bien la copie (profonde) de l'objet, et non le pointeur.
Typiquement, c'est même très rare qu'on soit amené à allouer
dynamiquement un objet à sémantique de valeur.
(L'implémentation des objets à sémantique de valeur peut
très bien utiliser la mémoire dynamique, quand par exemple la
taille ou la structure de l'objet peut varier dynamiquement. Mais à
ce moment-là, c'est un détail de l'implémentation de l'objet.)


Celà fait partie des contraintes dont je parlais, qui rendent l'utilisation
des objets à valeur plus facile (allocation auto versus allocation
dynamique)...

Chris



Avatar
Fabien LE LEZ
On Sun, 28 Dec 2003 14:50:51 +0100, "Christophe Lephay"
wrote:

Je dirais que la clé, c'est prèsque l'inverse : si l'identité a
de l'importance pour l'objet, il faut lui donner une sémantique de
référence. Sinon, une sémantique de valeur (au moins qu'il y a
d'autres contraints, comme le polymorphisme).


Néanmoins, je trouve que c'est la question inverse qui se pose dans son cas,
dans la mesure où il accède à ses objets via des pointeurs.


Euh... Oui mais non. Le fait d'accéder aux objets via des pointeurs se
décide _après_ avoir étudié la sémantique de l'objet. Apparemment il a
mis la charrue avant les boeufs, et on se retrouve avec une première
version du code. Soit cette version correspond bien (l'objet a une
sémantique d'entité) et on continue avec, soit cette version ne
convient pas (l'objet a une sémantique de valeur, et on n'a aucune
bonne raison d'utiliser des pointeurs), auquel cas la meilleure
solution est AMHA de modifier le code, histoire de continuer sur des
bases solides.

--
;-)


Avatar
Fabien LE LEZ
On 28 Dec 2003 12:08:20 +0100, James Kanze
wrote:

_Designing_ _Object_ _Oriented_ _C++_ _Applications_ _Using_ _the_
_Booch_ _Method_, de Robert Martin (ISBN 0-13-203837-4). Il est
malheureusement un peu périmé


Si Robert Martin est toujours vivant, n'a-t-il pas pensé à mettre son
livre au goût du jour ?

--
;-)

Avatar
James Kanze
Fabien LE LEZ writes:

|> On Sun, 28 Dec 2003 14:50:51 +0100, "Christophe Lephay"
|> wrote:

|> >> Je dirais que la clé, c'est prèsque l'inverse : si
|> >> l'identité a de l'importance pour l'objet, il faut lui donner
|> >> une sémantique de référence. Sinon, une sémantique de
|> >> valeur (au moins qu'il y a d'autres contraints, comme le
|> >> polymorphisme).

|> >Néanmoins, je trouve que c'est la question inverse qui se pose
|> >dans son cas, dans la mesure où il accède à ses objets via
|> >des pointeurs.

|> Euh... Oui mais non. Le fait d'accéder aux objets via des pointeurs se
|> décide _après_ avoir étudié la sémantique de l'objet.

Tout à fait. La décision d'utiliser les pointeurs ou les valeurs
dépend de la sémantique de l'objet, qui lui dépend du rôle
de l'objet dans l'application.

|> Apparemment il a mis la charrue avant les boeufs, et on se retrouve
|> avec une première version du code.

Ça, je n'en sais rien. Je n'ai rien vu dans sa question qui
indiquerait qu'il ne connaissait pas la sémantique de son objet.
Même par la suite, il a montré des problèmes de vocabulaire,
plus qu'une manque de compréhension de ce qu'il voulait faire.

|> Soit cette version correspond bien (l'objet a une sémantique
|> d'entité) et on continue avec, soit cette version ne convient pas
|> (l'objet a une sémantique de valeur, et on n'a aucune bonne
|> raison d'utiliser des pointeurs), auquel cas la meilleure solution
|> est AMHA de modifier le code, histoire de continuer sur des bases
|> solides.

Tout à fait. Le rafistolage revient toujours plus cher à la
longue, même s'il donne souvent l'impression d'apporter une solution
moins chère à courte échéance.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
1 2 3 4