Se connecter / S'enregistrer

Résolu Destructeurs C++

Solutions (5)
Tags :
  • Mémoires
  • Programmation
|
Bonjour,
je viens vers vous pour une petit question concernant les destructeurs en c++

je fais un exemple pour bien illustrer.

voici une classe

class A{

private:
Object *_t;
public:
A(Objet t); //initialise _t par t (paramètre)
}

A noter que je n'ai pas mis de destructeur et _t est un pointeur.

Je crée un objet A en initialisant _t au passage.

Ma question est de savoir:
1- puise-je directement détruire mon objet A avec delete sans à moins déclarer mon destructeur ~A?
2- si oui, que devient la mémoire allouée à mon objet _t? est elle libéré automatiquement après le delete de ma class ou faut-il faire un free avant?

Je sais que c'est un peu basique comme question mais je bloque sur cette notion.

Merci de vos réponse.
Contenus similaires
Meilleure solution
partage
|
Si le destructeur n'existe pas, disons qu'il y a un destructeur par défaut, mais lorsque tu fais un delete sur A, l'objet d'instance A et détruit, mais pas tout ce qui s'y refère.
Ton objet _t est créé dans une autre zone mémoire en dehors de la mémoire de l'objet de classe A. Donc, _t restera quelque part en mémoire. D'ailleurs, peut-être que ce pointeur, tu le références ailleurs, mais si ce n'est pas le cas, il est perdu en mémoire, mais reste alloué. Un tel programme génère des fuites mémoires (memory leak), car si tu crées et supprimes régulièrement des instances de classe A, alors la mémoire va augmenter jusqu'à saturation.

Pour tout ce qui est pointeur et référence, il faut bien voir que ce ne sont que des adresses mémoires qui pointent sur des zones théoriquement distinctes. C'est pour ça que les destructeurs existent:
- tu peux vouloir tout supprimer
- tu peux ne pas vouloir supprimer une référence (c'est pour ça que ce n'est pas automatique) si ce n'est qu'une référence (non créé par l'objet, le new et delete de la zone mémoire pouvant être géré ailleurs).
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par zigzagzouzou.
  • Commenter cette réponse |
Score
0
òh
òi
|
Thanks you CRicky.
  • Commenter cette réponse |
Score
0
òh
òi
|
Si tu veux partir à la chasse aux memory leaks dans un programme complexe, tu peux aussi surcharger les opérateurs new, new[], delete et delete[] pour tracer l'utilisation de la mémoire.

Ps: Un autre cas classique, c'est l'oubli des [] lorsqu'on fait un delete [] sur un tableau d'objets (le [] forçant l'appel du destructeur de chaque objet).
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci CRicky
C'est exactement ce que je pensais; des fuites mémoires!

En effet j'ai un plantage aléatoire de mon programme au bout de quelques jours de tournage. Je suppose en effet que la mémoire de _t s'accumule.

Maintenant, il suffit que je libère mon objet _t dans mon destructeur ~A que je vais rajouter dans ma classe.

Merci
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS