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

Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006
- - Dernière réponse : 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
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 222 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ctx_man
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
4
0
Merci
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.
Commenter la réponse de luhtor
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006
0
Merci
Ok je vois, merci beaucoup à vous deux, je vais utiliser les destructeurs pour libérer la mémoire allouée dynamiquement.
Commenter la réponse de vincemail