IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Destruction d'objet fille dans un tableau contenant des objets de type mère


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Destruction d'objet fille dans un tableau contenant des objets de type mère
    Bonjour,

    J'ai un problème de fuite mémoire, je pense qu'elle a lieu lorsque je détruit les éléments d'un tableau de type mère contenant contenant des objets de type fille héritant du premier type. L'un des éléments de type fille contient un vector<int> de plus par rapport au type mère et j'ai peur que celui ne s'efface pas correctement (en mettant un point d’arrêt dans le destructeur de la classe fille, je vois qu'il n'est pas appelé).

    Est-ce que mon problème peut venir de là, et comment le corriger?

    Par avance merci!
    Hugo

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Pour que le destructeur soit appelé, il faut impérativement que le destructeur de la mère soit déclaré virtual.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci, cela fonctionne!

    Cela compile et fonctionne également si je ne le déclare que virtual. Le déclarer ainsi me permettrais peut être de le remplir malgré tous pour qu'il puisse continuer d'être appelé pendant la destruction des objet fils. Mais je me trompe peut être :/

    Encore merci!
    Hugo

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Quand on détruit un objet fils, son destructeur est appelé, puis les destructeurs de ses constituants spécifiques, ensuite les destructeurs de ses bases et s'ensuivront les destructeurs de leurs constituants, à la création c'est exactement l'ordre inverse pour les constructeurs. C'est incontournable et n'a rien à voir avec virtual.
    Quand on détruit une référence sur une base. Si le destructeur n'est pas virtual, comment saurait-il que c'est en réalité un fils? Il ne peut pas "deviner" pas le bon point de départ de la destruction. S'il est virtual, on saura quoi détruire. C'est la même règle que pour trouver la bonne méthode si elle est ou pas virtual.

    Donc un objet qui est prévu pour être hérité doit avoir son destructeur :
    * public et virtual si on souhaite pouvoir le détruire à partir d'une référence
    * protected et non virtual, si on veut imposer une destruction qu'à partir d'une instance fille. private empêcherait le fils d'être destructible en vertu de la règle incontournable. public non virtual donnera la destruction incomplète que tu as eu. Inutile d'avoir protected virtual, le virtual ne sert à rien car le protected empêche une destruction directement demandée par une référence objet ancêtre.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    A moins de faire un truc très sal comme utiliser ton vector<int> dans la heap et non la stack de ton objet (ie un membre type vector<int>* vec = new vector<int>();) tu ne devrais pas avoir de fuite mémoire sur ce membre non.
    Donc
    - comment sont déclarées tes classes ?
    - comment as-tu détecté une fuite mémoire ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Parcour d'un tableau contenant des objets
    Par Super_carotte dans le forum Langage
    Réponses: 6
    Dernier message: 09/12/2011, 16h40
  2. Tri sur plusieurs champs d'un tableau contenant des objets
    Par swampsnake dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/07/2011, 13h14
  3. Agir sur des objets placés dans un tableau
    Par CyrilD dans le forum Général VBA
    Réponses: 2
    Dernier message: 27/03/2011, 22h06
  4. [POO] Tri d'un tableau contenant des objets
    Par shadypierre dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2009, 20h49
  5. [Tableaux] Tri de tableau contenant des objets
    Par erehcab dans le forum Langage
    Réponses: 10
    Dernier message: 07/10/2008, 19h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo