Desallocation c++

Signaler
Messages postés
44
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
28 juin 2007
-
Messages postés
44
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
28 juin 2007
-
Bonjour voici un bout de code :
for(i=0;i<nb_individus;i++)
{
individu *ind = new individu(fichier_entree);
ind->charger(i);
liste.addLast(ind);
// delete ind;
}

Est-ce que le "delete ind" est nécessaire ou bien l'individu "ind" est détruit automatiquement quand je sors de la boucle for ?

4 réponses

Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

Nécessaire puisque tu as utilisé new.
Par contre si addLast stock le pointeur et que tu le delete ça va poser problème.
Messages postés
44
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
28 juin 2007

Effectivement mon addLast stocke le ptr :

void C_Liste<T>::addLast(T *elt)
{
if (nb_element >= nb_element_alloue)
grow();


element[nb_element] = *elt;
nb_element++;
}

donc le delete ne marche pas alors ?
en fait j'ai des problemes de fuite memoire.
comment je fais alors pour supprimer "ind" de la memoire ?
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Apparement individu est une classe.
Pour supprimer individu passe par le déstructeur de ta classe.

Shell
Messages postés
44
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
28 juin 2007

en fait individu est une classe qui dérive d'une autre classe C_Liste.
le constructeur de la classe individu ne fait rien et appel le destructeur de sa classe mère donc C_Liste :

template <class T>
C_Liste<T>::~C_Liste()
{
delete [] element;
element = NULL;
nb_element = 0;
nb_element_alloue = 0;
}

Voici la structure de la classe C_Liste :
template <class T>
class C_Liste
{
private:
T *element; // Tableau d'élément
unsigned int nb_element; // Nombre d'éléments accessibles
unsigned int nb_element_alloue; // Nombre d'éléments alloués


public:
C_Liste();


~C_Liste();

etc....