Utilisation de delete sur des objets... ca marche comment ? [Résolu]

Signaler
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006
-
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006
-
Bonjour, je voudrais savoir comment fonctionne delete sur des objets.. Par exemple j'ai un objet Tableau qui contient un membre *tableau (qui est bien sur un tableau de valeur). J'alloue dynamiquement de la mémoire pour ce tableau dans le constructeur de Tableau et je voudrais savoir si lorsque j'écris : delete tableau1 (où tableau1 est un objet Tableau) est ce que la mémoire allouée pour *tableau est aussi libérée ?

Sinon une deuxième question : est-il nécessaire d'utiliser delete pour un objet dont l'allocation de mémoire est statique ?

Et puis troisième et dernière question : lorsque j'écris : delete tableau1 celà génère une erreur car tableau1 n'est pas un pointeur. Il n'est donc pas possible d'utiliser delete sur un objet ?

Merci beaucoup.

Vincent

3 réponses

Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Salut !

Si ton objet qui aloue de la memoire alloue de la memoire dynamiquement, cet objet DOIS absolument desallouer cette memoire, c'est a ca que sert le destructeur ! Normalement le but de creer un objet c'est aussi de pouvoir encapsuler tes données donc normalement seul ton objet a le droit de delete ces données, donc c'est ton objet qui doit faire "delete[] tableau;" et tu dois t'assurer que ton destructeur delete toute donnees allouer par ton objet. De la meme facon qu'en C on ne free que ce qui a ete "malloc", "calloc" ou "realloc", en C++ on ne delete que ce qui a ete "new", les autres cas de figure c'est le system qui s'en charge.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
1) Si ton tableau est alloué statiquement, surtout pas de delete sur
ton tableau. Faut faire un delete sur chaque élément de ton tableau si
il contient des pointeurs initialisés avec new.

2) Faut surtout pas utilisé delete sur un objet statique. Ca n'a aucun intéret, et indéfinie.

3) Tu utilises delete sur un pointeur d'objet initialisé avec new.
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006

Ok je vois, merci beaucoup à vous deux, je vais utiliser les destructeurs pour libérer la mémoire allouée dynamiquement.