Utilisation de delete sur des objets... ca marche comment ?

Résolu
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006 - 5 mars 2006 à 12:15
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006 - 5 mars 2006 à 13:56
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

ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
5 mars 2006 à 12:43
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.
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 mars 2006 à 12:23
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.
0
vincemail Messages postés 79 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 8 décembre 2006
5 mars 2006 à 13:56
Ok je vois, merci beaucoup à vous deux, je vais utiliser les destructeurs pour libérer la mémoire allouée dynamiquement.
0
Rejoignez-nous