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
Fabien LE LEZ writes:

|> 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 ?

Je crois que c'était prévu à un époque. Mais il s'est
intéressé à d'autres choses, et il s'occupe beaucoup plus de
l'« extreme programming » que d'autres choses actuellement (bien
que sa site, www.objectmentor.com, suggère une activité actuelle
dans le C++ et l'orientation objet).

--
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::

|> 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.


Effectivement... Maintenant que j'ai compris le vocabulaire, je me rends
compte que ce que j'ai fait est bien ce qu'il fallait faire... Comme quoi
on peut comprendre un language sans connaître tous les mots, et
heureusement d'ailleurs!!

|> 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.


Bien que spécialiste du rafistolage, je suis assez fier ;-) de ne pas y
être contraint

Avatar
drkm
Fabien LE LEZ writes:

il faut impérativement que le delete suive immédiatement le erase()


Est-ce réellement impératif ? Le delete doit-il réellement *suivre*
l'erase, ne peut-il le précéder ? Ce qui pourtant me semble plus
intuitif, en supprimant le passage par une variable temporaire.

--drkm

Avatar
drkm
James Kanze writes:

Fabien LE LEZ writes:

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

Je crois que c'était prévu à un époque. Mais il s'est intéressé à
d'autres choses, et il s'occupe beaucoup plus de l'« extreme
programming » que d'autres choses actuellement (bien que sa site,
www.objectmentor.com, suggère une activité actuelle dans le C++ et
l'orientation objet).


Au fait, quelqu'un en connait-il un peu plus sur l'« Agile Software
Development » ? Je ne sais rien du sujet, mais viens de voir, sur le
site sus-mentionné, les critiques enjouées, à propos de ce bouquin, de
M. Fowler, E. Gamma et J. Vlissides.

La citation de ce dernier est « When Bob Martin speaks, better
listen up ».

De quoi éveiller la curiosité ...

--drkm

Avatar
Fabien LE LEZ
On 31 Dec 2003 05:03:09 +0100, drkm <fr.comp.lang.c++@fgeorges.org>
wrote:

il faut impérativement que le delete suive immédiatement le erase()


Est-ce réellement impératif ? Le delete doit-il réellement *suivre*
l'erase, ne peut-il le précéder ?


Pas forcément. Par contre je voulais insister sur le fait qu'il ne
doit pas y avoir de risque de séparation entre les deux -- le couple
"erase+delete", quel que soit l'ordre, doit être considéré comme
atomique.

--
;-)

http://www.gotw.ca/gotw/063.htm
http://www.gotw.ca/gotw/067.htm#2


Avatar
James Kanze
drkm <fr.comp.lang.c++@fgeorges.org> writes:

|> Fabien LE LEZ writes:

|> > il faut impérativement que le delete suive immédiatement le
|> > erase()

|> Est-ce réellement impératif ? Le delete doit-il
|> réellement *suivre* l'erase, ne peut-il le précéder ? Ce
|> qui pourtant me semble plus intuitif, en supprimant le passage par
|> une variable temporaire.

Selon la norme, formellement, dès qu'il y a un objet qui n'est pas
copiable ou affectable dans la collection, il y a un comportement
indéfini. Et selon la norme, après un delete, aucun pointeur vers
ce qui a été supprimé n'est copiable.

Dans la pratique, il en va autrement, et je n'hesite pas à faire des
choses du genre :

delete *i ;
*i = NULL ;

Dans la mesure où il n'y a aucun appel de fonction entre le delete et
l'affectation d'un pointeur nul, je ne vois pas d'où pourrait venir
le problème.

Il m'arrive aussi d'écrire des choses du genre :

while ( ! c.empty() ) {
delete *c.begin() ;
c.erase( c.begin() ) ;
}

Mais il y a là effectivement une faible risque. Dans la mesure que la
plupart de mon code n'est de toute façon pas parfaitement portable,
je pourrais l'accepter -- je sais que de tel code marcherait, par
exemple, sur toute machine Unix, et sans doute Windows aussi. Mais en
principe, au moins, la fonction erase pourrait lire le pointeur que je
viens d'effacer, et sur certains systèmes, une telle lecture pourrait
provoquer un comportement réelement inattendu. C'est donc à faire
avec précaution.

Le plus sûr, en fin de compte, c'est bien de créer un objet
effaceur :

template< typename T >
struct Destroyer
{
void operator()( T*& p ) const
{
T* tmp = NULL ;
std::swap( tmp, p ) ;
delete tmp ;
}
} ;

et puis de se servir de std::for_each.

--
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
drkm <fr.comp.lang.c++@fgeorges.org> writes:

|> James Kanze writes:

|> > Fabien LE LEZ writes:

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

|> > Je crois que c'était prévu à un époque. Mais il s'est
|> > intéressé à d'autres choses, et il s'occupe beaucoup plus
|> > de l'« extreme programming » que d'autres choses
|> > actuellement (bien que sa site, www.objectmentor.com, suggère
|> > une activité actuelle dans le C++ et l'orientation objet).

|> Au fait, quelqu'un en connait-il un peu plus sur l'« Agile
|> Software Development » ?

Je suis un peu sceptique. Du peu que j'ai vu (mais c'est très peu),
c'est un remballage de la programmation extrème : c-à-d surtout
une prise de leurs souhaits pour la réalité par des
développeurs.

Ça ne veut pas dire qu'il n'y est rien de bon. Si l'importance des
tests est connue depuis longtemps, il y a bien de boîtes qui le
negligent, à commencer par les plus grandes (et note bien le
pluriel). En revanche, dire que les tests remplacent la documentation ou
la spécification externe, c'est prendre ses souhaits pour la
réalité.

|> Je ne sais rien du sujet, mais viens de voir, sur le site
|> sus-mentionné, les critiques enjouées, à propos de ce
|> bouquin, de M. Fowler, E. Gamma et J. Vlissides.

Ce sont des experts de la programmation objet, non de la génie
logicielle. Ce sont deux domaines bien distincts.

|> La citation de ce dernier est « When Bob Martin speaks, better
|> listen up ».

Robert Martin est un des plus grands experts que je connais sur
l'orientation objet en C++. Ça ne veut pas dire que je prends sa
parole comme la Bible, surtout dans d'autres domaines.

--
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
Michel Michaud
Dans news:,
Au fait, quelqu'un en connait-il un peu plus sur l'« Agile
Software Development » ? Je ne sais rien du sujet, mais viens de
voir, sur le site sus-mentionné, les critiques enjouées, à propos
de ce bouquin, de M. Fowler, E. Gamma et J. Vlissides.

La citation de ce dernier est « When Bob Martin speaks, better
listen up ».

De quoi éveiller la curiosité ...


Alors tu peux aller sur microsoft.public.vstudio.development (ça
n'a pas affaire là, mais c'est parti là et ça continue) pour lire
une magnifique (!) discussion sur ce sujet, à laquelle Martin a
d'ailleurs participé... Ça commence ici :

http://minilien.com/?lEZRnr7ImP

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
darkman_spam
"Michel Michaud" wrote in message news:<bhDJb.20322$...

Dans news:,

La citation de ce dernier est « When Bob Martin speaks, better
listen up ».

De quoi éveiller la curiosité ...


Alors tu peux aller sur microsoft.public.vstudio.development (ça
n'a pas affaire là, mais c'est parti là et ça continue) pour lire
une magnifique (!) discussion sur ce sujet, à laquelle Martin a
d'ailleurs participé... Ça commence ici :

http://minilien.com/?lEZRnr7ImP


Merci. Je lirai ça après cette période agitée ;-)

--drkm


Avatar
laurent.ga
|> > intéressé à d'autres choses, et il s'occupe beaucoup plus
|> > de l'« extreme programming » que d'autres choses
|> > actuellement (bien que sa site, www.objectmentor.com, suggère
|> > une activité actuelle dans le C++ et l'orientation objet).

|> Au fait, quelqu'un en connait-il un peu plus sur l'« Agile
|> Software Development » ?

Je suis un peu sceptique. Du peu que j'ai vu (mais c'est très peu),
c'est un remballage de la programmation extrème : c-à-d surtout
une prise de leurs souhaits pour la réalité par des
développeurs.


Ca me semble un peu rapide comme procès. Pour ceux que ça intérese, je
conseille (en toute partialité, étant co-auteur) l'ouvrage de
référence suivant, en français:
"Extreme Programming, avec 2 études de cas", ed. Eyrolles
Bénard, Bossavit, Medina, Willliams
http://www.amazon.fr/exec/obidos/ASIN/2212110510/

En revanche, dire que les tests remplacent la documentation ou
la spécification externe, c'est prendre ses souhaits pour la
réalité.


Qu'est-ce que les développeurs souhaitent, selon toi, et que la
logique "les tests sont de la documentation (ou de la spécification)"
promettrait de faire réalité ?

Laurent
http://bossavit.com/
http://bossavit.com/thoughts/

1 2 3 4