begin process at 2012 02 11 04:15:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

liberer un emplaceemnt dans une "list" en c++ sans supprimer l'objet


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

liberer un emplaceemnt dans une "list" en c++ sans supprimer l'objet

mercredi 20 août 2008 à 14:04:17 | liberer un emplaceemnt dans une "list" en c++ sans supprimer l'objet

timy94

Bonjour

Voici mon code

CEvenement & MyClasse::Get_Evt()
{
       list <CEvenement *>::iterator pEvt;
       list <Cevenement *>::iterator pListEvt = m_Liste_Evt.begin();
       pEvt = pListEvt;
       if( m_ListeEvt.size() != 0)
      {   
                 m_Liste_Evt.erase(pListEvt);
      }
       return **pEvt;
}

l'appel à cette methode est
 CEvenement & evenement = Ref.MyClasse.Get_Evt();

Ce que je veux faire.

J'ai une liste d'itérator qui pointent vers des Objets de type "Classe d'Evenement".
Je veux que la methode Get_Evt renvoi l'adresse de l'objet "Classe d'Evenement", retire de la liste l'iterator, mais ne touche pas à l'objet concerné puisque l'objet est utilisé par une autre classe.

En fait c'a à l'air de marcher mais de temps en temps ca plante et je ne comprends pas pourquoi. le retour de la methode Get_Evt() me revoit sur n'import quoi.

Timy94

mercredi 20 août 2008 à 18:26:40 | Re : liberer un emplaceemnt dans une "list" en c++ sans supprimer l'objet

Lucky92

Quand ta liste est vide, tu retournes l'objet référencé par m_liste_Evt.begin() qui vaut alors m_liste_Evt.end() ; or, par définition, m_liste_Evt.end()  ne pointe sur aucun élément valide. Donc, tu obtiens n'importe quoi.
samedi 23 août 2008 à 08:57:20 | Re : liberer un emplaceemnt dans une "list" en c++ sans supprimer l'objet

timy94


Bonjour

Certe m_liste_Evt.begin() est vide, mais avant de le detruire j'ai passé un référence à l'iterator pEvt. Et, c'est cet iterator que je passe.

Alors comment faire pour conserver la place memoire de l'objet intact pour une utilisation ulterieure par une reférence sur cet l'objet et ne supprimer que le lien sur la liste.

En clair je veux vider la liste mas pas supprimer les objet.

Marci, salut


Timy94

samedi 23 août 2008 à 11:16:25 | Re : liberer un emplaceemnt dans une "list" en c++ sans supprimer l'objet

Lucky92

C'est déjà le cas, erase() ne détruit pas les objets, il retire simplement les pointeurs de la liste.
En fait, ta méthode fonctionne correctement tant que la liste n'est pas vide. Mais dés que la liste est vide, tu n'as plus d'objet consistant à renvoyer, et tu renvoies le 'end' de ta liste ; or avec les itérateurs, le 'end' pointe après le dernier objet valide. Donc, lorsque tu appelles ta fonction alors que la liste est vide, la référence retournée est bidon et/ou ton application plante...

Voici quelques solutions possibles :
1/ tu remplaces les références par des pointeurs, et lorsque la liste est vide tu retournes un pointeur nul pour que l'appellant puisse tester la validité. ( Il n'y a de notion de référence nul en c++ !).

2/ tu crées dans ta classe une méthode qui permet à l'appellant de savoir si la liste est vide.

3/ losrque la liste est vide, tu lances une exception que l'appellant puisse catcher.

2 petites remarques :
pour tester si une liste est vide, la méthode empty() est plus élégante.
pour récupérer le premier ( resp. le dernier ) élément d'une liste non vide, utilises front() ( resp. back() ).
pour supprimer le premier ( resp. le dernier ) élément d'une liste non vide, utilises pop_front() ( resp. pop_back() ).

Ton code devient alors :

CEvenement & MyClasse::Get_Evt()
{
    if  ( m_Liste_Evt.empty() ) throw;
    CEvenement & evt  =  m_Liste_Evt.front() ;
    m_Liste_Evt.pop_front();
    return evt ;
}


Cette discussion est classée dans : objet, liste, get, list, evt


Répondre à ce message

Sujets en rapport avec ce message

liste contenant un objet d'une de mes classes [ par Eric ] Salut,Je voudrais créer une liste contenant comme objet une de mes classes..par exemplelist ma_Liste_de_ma_Classe;mais je ne sais pas comment m'y pre display list [ par adidmamah ] bon voici la situation : - j'ai un objet déclaré en variable globale- dans le constructeur de la class je cré la display list :glNewList(1,GL_COMPILE) problème tri d'une liste d'objet ! [ par tomsawyerbelgique ] Bonjour, j'aimerais savoir comment on fait pour surdéfinir un foncteur de tri de liste d'objet. C'est objet sont des pointeurs sur une structure et la erreur "Segmentation fault" en C++ [ par antgre ] Bonjour a tous,Je travaille sur un programme dont une partie doit implementer une liste de points.Chaque point comprenant un certain nombre de caracté lire des doubles et les inserer dans une liste [ par fatcat ] Salut a toutes et a tousVoila mon petit probleme:j ai créer un objet "point" et un objet "liste de point"A partir d'un fichier contenant des couples d [MFC] Drop List [ par Helau ] Bonjour, J'ai une combo de type Drop list. La liste affichée est plus large que la combo. Ne sachant pas mettre un scroll horizontal, j'ai cherché une Problème Recherche + Helpppppppppppp [ par emmanuel9 ] Bonjour, En faite j'ai une fenêtre destiné à la recherche et on peut recherche une personne sur son nom, prénom, sur la date de création etc.... Ca List de l'aide svp [ par silverfr78021959 ] Bonjour voilà je dois créer une liste et de la en faire l'affichage, mais cette affichage doit être fait particulierement. Je m'explique je voudrais a Comment afficher la liste des fichiers dans le composant List View [ par kanimana ] Bonjour Svp, indiquez moi la fonction qui permettera d'afficher les fichier contenu dans un répertoire dans le composant ListView, avec les détails va_list [ par garslouche ] Salut à tous,je voudrais faire un truc idiot mais c juste pour un test : je voudrais faire une fonction myprintf qui fasse comme printf (en utilisant


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,948 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales