erase et delete d'un vector
Bonjour à tous;
J'ai un problème dans l'utilisation de conteneur vector
Voici un bout de code que j'utilise
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
vector<Classetype*>m_Liste;
void RemplirListe(){
ClassType MonObjet1=new ClassType();
m_Liste.push_back;
.
.
.
ClassType MonObjet10=new ClassTYpe();
m_Liste_push_back(MonObje10);
}
void Supprimer(int type)
{
for(int i=0;i<m_Liste.size();i++)
ClassType* pObjet=(ClassType*)m_Liste[i]
if(pObjet->TYpe()==type){
delete pObjet;
m_Liste.erase(&m_Liste[i]);
return;
}
} |
Est ce que erase suffit tout seul ?
2)Une autre petite question
Code:
1 2 3 4 5 6 7
|
ClassType* pMonObjet=new ClassType();
void affectation(ClassType* pObjet)
{
pMonOBjet=new ClassType(*pObjet)//Constructeur par copie
} |
Est ce que cette affectation produit une perte de mémoire
Où, bien avant d'affecter, il faut faire un delete.
Merci infiniment pour votre aide.
Re: erase et delete d'un vector
Citation:
Envoyé par Jahjouh
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
vector<Classetype*>m_Liste;
void RemplirListe(){
ClassType MonObjet1=new ClassType();
m_Liste.push_back;
.
.
.
ClassType MonObjet10=new ClassTYpe();
m_Liste_push_back(MonObje10);
}
void Supprimer(int type)
{
for(int i=0;i<m_Liste.size();i++)
ClassType* pObjet=(ClassType*)m_Liste[i]
if(pObjet->TYpe()==type){
delete pObjet;
m_Liste.erase(&m_Liste[i]);
return;
}
} |
Est ce que erase suffit tout seul ?
erase suffit mais &m_Liste[i] n'est pas un moyen conforme d'obtenir un itérateur sur le ieme élément. Il faut utiliser m_Liste.begin() + i ou bien itérer avec un ... itérateur.
Si supprimer un élément au milieu est courant et que l'indexation ne l'est pas (du moins l'indexation utile, pas celle de l'exemple où elle ne sert qu'à itérer), il faut envisager l'utilisation des std::list pour lesquels erase est plus performant.
Citation:
Code:
1 2 3 4 5 6 7
|
ClassType* pMonObjet=new ClassType();
void affectation(ClassType* pObjet)
{
pMonOBjet=new ClassType(*pObjet)//Constructeur par copie
} |
Est ce que cette affectation produit une perte de mémoire
Où, bien avant d'affecter, il faut faire un delete.
Il vaudrait vraissemblablement mieux en effet. Mais je me demande l'intérêt de ce que tu fais par rapport à
Code:
1 2 3 4 5
| ClassType monObjet;
void affectation(ClassType* pObjet)
{
monObjet=*pObjet;
} |
Normalement un intérêt des pointeurs est l'utilisation du polymorphisme, mais ici tu as des constructeurs de copie (ce qui n'est pas très fréquent quand on utilise du polymorphisme) et surtout tu fais une affectation "tronquante" si le type dynamique de *pObjet n'est pas ClassType, ce que je n'ai jamais vu adéquat en présence de polymorphisme.